Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 19

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта

10.03.2017, 18:18. Показов 993. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Работаю над игрой. Хочу чтобы объект2 разрушался в то время, когда объект1 подошел к нему. Пользуюсь командой "Destroy", но пишет ошибку. Кто шарит в паскале, помогите!

Вот код:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Program demogame;
   uses graphabc,abcobjects,events;
  var object1,object2:rectangleabc;
   x,y,spl,xb,yb:integer;
   
 procedure player(objectl:rectangleabc;speed:integer);
  begin
    x:=random(600);
    y:=windowheight-random(400)-30;
    object1:=rectangleabc.Create(x,y,30,30,clwhite);
    spl:=speed;
  end;
  
 procedure loot(object2:rectangleabc);
  begin
    xb:=random(600);
    yb:=windowheight-random(400)-30;
   object2:=rectangleabc.Create(xb,yb,30,30,clred);
 end;
 
  procedure move(keydown:integer);
   begin
   case keydown of
 VK_right:
   begin
    object1.left:=object1.left+spl;
   end;
 VK_left:
   begin
    object1.left:=object1.left-spl;
   end;
 VK_up:
   begin
    object1.top:=object1.top-spl;
   end;
 VK_down:
   begin
    object1.top:=object1.top+spl;
   end;
  end;
end;
 
 procedure update(time:integer);
  begin
    while true do
     begin
       if object1.left<=xb+15 then
        if object1.left>=xb-15 then 
         if object1.top<=yb+15 then
         if object1.top>=yb-15 then object2.Destroy; //Ошибка
       sleep(time);
   end;
 end;
begin
   setwindowsize(640,480);
   floodfill(1,1,clblack);
   setwindowcaption('Game Snake');
   loot(object2);
   player(object1,10);
   onkeydown:=move;
   update(20);
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.03.2017, 18:18
Ответы с готовыми решениями:

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Здравствуйте. Подскажите пожалуйста как решить эту проблему: Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта....

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Здравствуйте, столкнулся с этим :Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта. program Lab11_2; ...

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Доброго времени суток. Компилятор выдает ошибку (Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта.) на 70...

2
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33379 / 21503 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 12
10.03.2017, 18:32
Ну, удалил ты первый раз объект, и тут же происходит попытка снова его удалить, потому что цикл вечный, и координаты не изменились. Надо сразу после удаления объекта_2 пересоздавать его в другом месте:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure update(time: integer);
begin
  while true do
  begin
    if object1.left <= xb + 15 then
      if object1.left >= xb - 15 then 
        if object1.top <= yb + 15 then
          if object1.top >= yb - 15 then 
          begin
            object2.Destroy; // Ошибки уже нет
            loot(object2); // Пересоздание
          end;
    sleep(time);
  end;
end;
Это первое. А второе -
Pascal
1
2
3
4
5
6
procedure loot(var object2: rectangleabc); // <--- var добавь на всякий случай, ты же объект возвращаешь из процедуры...
begin
  xb := random(600);
  yb := windowheight - random(400) - 30;
  object2 := rectangleabc.Create(xb, yb, 30, 30, clred);
end;
Процедуры player это тоже касается, там тоже возвращается объект через параметр.
1
0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 19
10.03.2017, 19:20  [ТС]
Благодарю!)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.03.2017, 19:20
Помогаю со студенческими работами здесь

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Нужно нарисовать 100 пикселей в случайном порядке Выдаёт ошибку не выводит пиксели на экранuses GraphABC; type tLocation=class ...

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Искал на форуме ничего путного не нашёл(тапками не кидайтесь). uses GraphABC,ABCobjects; var object1:rectangleABC;spPl:integer;...

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Добрый день. Решил сделать платформер на pascalABC.net, и встретился с такой ошибкой в 20 строке: Ошибка времени выполнения: Ссылка на...

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Подскажите пожалуйста, как написать программу так чтобы не вылезала ошибка? uses graphabc; type box = class x, x1, y,...

Ошибка времени выполнения: Ссылка на объект не указывает на экземпляр объекта
Нужно составить программу для создания и обработки односвязного списка. Прjцедура sum-находит общую стоимость всех товаров из списка....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru