0 / 0 / 0
Регистрация: 10.03.2017
Сообщений: 19

Ошибка при использовании модуля ABCObjects

16.03.2017, 21:30. Показов 1321. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Столкнулся с одной проблемой в программе. Я предполагаю что это ошибка паскаля а не когда, но все же проверьте пожалуйста. На днях создаю игру и понял что удаленный объект (object2) исчезает но не удаляется. Я использовал команду "Destroy" (object2.destroy). Дело в том, что когда я попадаю в вражеский корабль, он исчезает но не удалятся, хотя использована команда "Destroy". Я не понимаю как решить эту проблему,потому что если брать графический объект квадрат или круг то вроде все работает нормально.

Эту ошибку я узнал, когда стрелял уже после удаленного объекта (object2), и заметил, что пули (bullet) пропадают на пустом месте в рандомных местах. Потом я провёл исследование и понял что дело в object2. Он удаляется но в тоже время становиться невидимым. Такого явно не должно быть. Команду object2.visible:=false не использовал. Кто шарит помогите плез!


Вот код, может пригодится, хотя вряд ли :


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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
program easymove;
uses graphabc,events,abcobjects,timers;
var
  space,object1,object2: pictureabc;
  x,y,s,i,xc,yc,xc1,yc1,hpbot,hpb,hpp:integer;
  right,left,up,down,shoot,kl:boolean;
  
  bullet1:array [1..5] of pictureabc;
  xbul,ybul,xbul1,ybul1:array[1..5] of integer;
  
  healthbotbar,healthbar:TextABC; 
 
procedure window(windowlock: boolean);
begin
  setwindowsize(760,640);
  setwindowcaption('Galaxy Wars');
  Window.IsFixedSize:=windowlock;
  space:=pictureabc.Create(0,0,'C:\Users\Дима\Desktop\Мои програмки\Top Of Programmes\Galaxy_Wars\Textures\space.jpg');
end; 
  
procedure player(hpconst:integer);
begin
hpp:=hpconst;
  x:=330;
  y:=530;
  object1:=pictureabc.Create(x,y,'C:\Users\Дима\Desktop\Мои програмки\Top Of Programmes\Galaxy_Wars\Textures\galaxyships\ship1.png');
end;
 
procedure comp(hpconst:integer);
begin
  hpb:=hpconst;
  hpbot:=hpb;
  xc:=random(10,740);
  yc:=random(10,200);
   xc1:=random(10,740);
   yc1:=random(10,200);
  object2:=pictureabc.Create(xc,yc,'C:\Users\Дима\Desktop\Мои програмки\Top Of Programmes\Galaxy_Wars\Textures\galaxyships\ship2.png');
  healthbotbar:=TextABC.Create(xc+15,yc-15,12,'',clWhite);
end;
procedure compmove(spbot:integer);
begin
    if xc1 > xc then xc:=xc+spbot;
    if xc1 < xc then xc:=xc-spbot;
    if yc1 > yc then yc:=yc+spbot;
    if yc1 < yc then yc:=yc-spbot;
    object2.MoveTo(xc,yc);
    healthbotbar.MoveTo(xc+15,yc-15);
   if (xc1>xc-5) and (xc1<xc+5) and (yc1>yc-5) and (yc1<yc+5) then
     begin
       xc1:=random(10,740);
       yc1:=random(10,200);
      end;
end;
 
procedure bulshoot();
begin
 if kl=true then 
  begin
  xbul[s]:=x;
  ybul[s]:=y;
  bullet1[s].MoveTo(xbul[s]+35,ybul[s]);
  kl:=false;
  s:=s+1;
   if s>=5 then s:=1;
  end;
end;
 
procedure keydown(key:integer);                   
begin
 
  if key=vk_right then right:=true;
  if key=vk_left then left:=true;
  if key=vk_up then up:=true;
  if key=vk_down then down:=true;
    if y<=485 then up:=false;
     if y>=530 then down:=false;
      if x>=665 then right:=false;
       if x<=0 then left:=false;
 if key=vk_space then kl:=true;
end;
 
procedure keyup(key:integer); 
begin
  if key=vk_right then right:=false;
  if key=vk_left then left:=false;
  if key=vk_up then up:=false;
  if key=vk_down then down:=false;
  //if key=vk_space then kl:=false;
end;
 
procedure move(speed:integer);
begin
  if up=true then y:=y-speed;
  if down=true then y:=y+speed;
  if right=true then x:=x+(speed+2);
  if left=true then x:=x-(speed+2);
  object1.MoveTo(x,y);
end;
 
 
procedure update(frame:integer);
begin
 while true do
begin
  move(2);
  compmove(3);
  healthbotbar.Text:=('Bot '+IntToStr(hpbot)+'/'+inttostr(hpb));
  //healthbar.Text:=('Health '+IntToStr(hpp)+'/500');
  for var i:=1 to 5 do
   begin
    ybul[i]:=ybul[i]-15;
    bullet1[i].MoveTo(xbul[i]+35,ybul[i]);
    if bullet1[i].Intersect(object2) then
     begin
     xbul[i]:=-30;
     ybul[i]:=-30;
     bullet1[i].MoveTo(xbul[i],ybul[i]);
     hpbot:=hpbot-10;
     //hpp:=hpp-10;
     healthbar.Destroy;
     healthbar:=TextABC.Create(0,0,20,'Health '+IntToStr(hpp)+'/500',clgray);
     if hpbot<=0 then
      begin
     healthbotbar.Destroy;
     object2.Destroy;
      end;
     end;   
   end;
sleep(frame);
 end;
end;
 
 
begin
s:=1;
var t:= new timer(250,bulshoot);
t.start;
  window(true);
  for i:=1 to 5 do
   begin
     xbul[i]:=-30;
     ybul[i]:=-30;
     bullet1[i]:=pictureabc.create(xbul[i],ybul[i],'C:\Users\Дима\Desktop\Мои програмки\Top Of Programmes\Galaxy_Wars\Textures\bullets\bullet1.png');
   end;
  player(500);
  comp(50);
  onkeydown:=keydown;
  onkeyup:=keyup;
  healthbar:=TextABC.Create(0,0,20,'Health '+IntToStr(hpp)+'/500',clgray);
  update(20);
end.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.03.2017, 21:30
Ответы с готовыми решениями:

Ошибка в использовании модуля
написал модуль для пробы,и тестирующую программу для него.но почему-то не работает,посоветуйте что-нибудь пожалуйста вот сам модуль ...

Segmentation fault при использовании модуля <time.h>
Есть код time_t now; struct tm * ptr; static char tbuf; bzero(tbuf,64); time(&amp;now); ptr = localtime(&amp;now); strftime(tbuf, 64,...

Помехи в бортовой сети при использовании DC-DC для питания GSM модуля
Задался питанием модуля GSM (4В, до 2А) питанием в условиях автомобиля - 12-16В. Для этого были опробованы схемы на многих Step-Down'ах под...

1
 Аватар для JuriiMW
5092 / 2660 / 2353
Регистрация: 10.12.2014
Сообщений: 10,055
17.03.2017, 09:03
Пока у вас всего один такой объект, а когда их будет 10 или больше, то каким образом хотите отслеживать их координаты и „живой“ от или уже нет?

Может лучше сразу запихать его в запись и дополнить её методами:

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
63
64
65
66
const
  EnemyCount = 5;
  EnemySpeed = 3;
 
type
  tEnemy = record
    ob: pictureabc;
    live: boolean;
    hp: Integer;
    xc, yc: Integer;
    
    /// создание
    constructor create;
    begin
      ob := pictureabc.Create(0, 0, 'dunit_testclass.bmp');
      init;
    end;
    
    /// возвратить к жизни
    procedure init;
    begin
      aim;
      (ob.Left, ob.Top) := (xc, yc);
      live := True;
      hp := 50;
      aim;
      move;
    end;
    
    /// убить
    procedure kill;
    begin
      MoveTo(-100, -100);
      live := False;
    end;
    
    /// движение
    procedure move;
    begin
      if not live then Exit;
      var dx := xc - ob.Left;
      var dy := yc - ob.Top;
      case sign(dx) of
        -1: ob.dx := max(-EnemySpeed, dx);
        0: ob.dx := 0;
        +1: ob.dx := min(+EnemySpeed, dx);
      end;
      case sign(dy) of
        -1: ob.dy := max(-EnemySpeed, dy);
        0: ob.dy := 0;
        +1: ob.dy := min(+EnemySpeed, dy);
      end;
      ob.Move;
      if (dx = 0) or (dy = 0) then aim;
    end;
  
    /// новая цель движения
    procedure aim;
    begin
      xc := Random(10, 740);
      yc := Random(10, 200);
    end;
  end;// tEnemy
 
var
  enemy: array of tEnemy;
Это начальный пример методов, которые можно дополнять и расширять по мере необходимости.
Ведь согласитесь, что вот так проще в коде программы вызвать:
Pascal
1
2
3
  // создание противников в основном модуле программы
  SetLength(enemy, EnemyCount);
  for var e := 0 to EnemyCount - 1 do enemy[e] := new tEnemy;
Pascal
1
2
  // движение противников в процедуре update
    for var e := 0 to EnemyCount-1 do enemy[e].move;
Теперь, если противника нужно убить, то достаточно вызвать
Pascal
1
enemy[i].kill;
При этом сам объект не уничтожен и его можно оживить, если понадобится…

P.S. Аналогично нужно переделать „героя“.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.03.2017, 09:03
Помогаю со студенческими работами здесь

При использовании модуля Сrt нужно чтобы фон был "перекрашен"
При использовании модуля Сrt нужно чтобы фон был &quot;перекрашен&quot; Есть ли такая команда в модуле CRT?(textbackground и пробелами по всему...

Как сделать так, чтобы при использовании модуля из tkinter не открывалось окно tkinter?
Как сделать так, чтобы при использовании модуля из tkinter не открывалось окно tkinter? Я пишу приложение на kivy но использую ...

Ошибка при использовании vector (в конце, после вывода результатов выскакивает ошибка, но сам результат коректен)
Суть в следующем, мы считываем введеные значения и выводим этот массив Проблема такова что массив выводиться, корректно, но в конце...

Ошибка при использовании ADODB.CONNECTION при работе с dbf-файлом
Добрый день! Написала макрос с использованием adodb.connection. макрос удаляет строки из файла dbf. На моем компьютере работает, поставила...

Ошибка при получении данных из БД при использовании MVC framework 4.0
// HomeControlers.cs using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

Новые блоги и статьи
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
Unity 4D
GameUnited 13.06.2025
Четырехмерное пространство. . . Звучит как что-то из научной фантастики, правда? Однако для меня, как разработчика со стажем в игровой индустрии, четвертое измерение давно перестало быть абстракцией из. . .
SSE (Server-Sent Events) в ASP.NET Core и .NET 10
UnmanagedCoder 13.06.2025
Кажется, Microsoft снова подкинула нам интересную фичу в новой версии фреймворка. Работая с превью . NET 10, я наткнулся на нативную поддержку Server-Sent Events (SSE) в ASP. NET Core Minimal APIs. Эта. . .
С днём независимости России!
Hrethgir 13.06.2025
Решил побеседовать, с утра праздничного дня, с LM о завоеваниях. То что она написала о народе, представителем которого я являюсь сам сначала возмутило меня, но дальше только смешило. Это чисто. . .
Лето вокруг.
kumehtar 13.06.2025
Лето вокруг. Наполненное бурями и ураганами событий. На фоне магии Жизни, священной и вечной, неумелой рукой человека рисуется панорама душевного непокоя. Странные серые краски проникают и. . .
Популярные LM модели ориентированы на увеличение затрат ресурсов пользователями сгенерированного кода (грязь -заслуги чистоплюев).
Hrethgir 12.06.2025
Вообще обратил внимание, что они генерируют код (впрочем так-же ориентированы разработчики чипов даже), чтобы пользователь их использующий уходил в тот или иной убыток. Это достаточно опытные модели,. . .
Топ10 библиотек C для квантовых вычислений
bytestream 12.06.2025
Квантовые вычисления - это та область, где теория встречается с практикой на границе наших знаний о физике. Пока большая часть шума вокруг квантовых компьютеров крутится вокруг языков высокого уровня. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru