Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.08.2009, 07:54   #1
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
Сообщение Реализация пуль в игре?

Вот хочу разобрать одну вещь с TObjectList



вот мой код:

{TBullet - класс пули}

Код:
var
 Bullet : TBullet;
 ObjectList : TObjectList; - это класс уже создан


procedure Create_Bullet(x,y:integer);
begin
 Bullet := TBullet.create;
 Bullet.X := x;
 Bullet.Y := y;
 ObjectList.add(Bullet);
end;
Вот тут то и ошибки:

Код:
procedure process;
var
 i:integer;

begin
 
for i:=0 to ObjectList.count - 1 do
    begin
      Pointer(Bullet) := ObjectList.Items[i];
        Bullet.x := Bullet.x + 3; //Пуля летит

//Если пуля улетела за 350 то уничтожаем ее

      if Bullet.x > 350 then
        begin
           ObjectList.Delete(i);
        end;


    end;

end;
Надо сделать так чтобы пули которые вылетели за 350
уничтожались,а которые не уничтожены так чтобы летели
помогите мне пожалуйста заранее вам спасибо.
VintProg вне форума Ответить с цитированием
Старый 29.08.2009, 10:00   #2
Dj_smart
Капсула от спама
Форумчанин
 
Аватар для Dj_smart
 
Регистрация: 04.03.2008
Сообщений: 779
По умолчанию

Во всяком случае осторожно с for'ом, где объект может быть удален. То бишь возможна ситуация, что после удаления объекта for будет продолжаться влоть до id этого объекта. Пример:
Код:
for i:=1 to кол. объ. do begin
  ... делаешь чтото ...
  if i=2 then delete(3);
end;
Вылезет косяк когда третий объект удалится, а больше их не будет (останеться 2), но цикл всеравно пройдет 3-ю итерацию.

В таких случаях используй while.
Код:
i:=0;
while i<кол. объ. do begin
  if ... чтото там .. then begin
    delete(i);
    dec(i); // обязательно задумайся зачем это нужно
  end;
  inc(i);
end;
Если данный ответ не столь конкретен, как Вы желаете его увидеть, возможно необходимо поразмыслить, стоит ли вопрос того, чтобы о нём спрашивать на форуме?
CncFiles.ru - бесплатный файловый хостинг

Последний раз редактировалось Dj_smart; 29.08.2009 в 10:04.
Dj_smart вне форума Ответить с цитированием
Старый 29.08.2009, 10:03   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Я бы написал так:

Код:
procedure process;
var
 i:integer;

begin
i:=0; 
while i<(ObjectList.count - 1) do
    begin
        Bullet := ObjectList.Items[i];//Зачем было писать Pointer?
        Bullet.x := Bullet.x + 3; //Пуля летит
//Если пуля улетела за 350 то уничтожаем ее
      if Bullet.x > 350 then
        begin
           bullet.destroy;//Надо сначало уничтожить пулю, а потом удалять её из списка
           ObjectList.Delete(i);
           dec(i);//И сделай i меньше на один
        end;
    end;
end;
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 29.08.2009 в 10:06.
russian-stalker вне форума Ответить с цитированием
Старый 29.08.2009, 10:10   #4
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
bullet.destroy;//Надо сначало уничтожить пулю, а потом удалять её из списка
ObjectList.Delete(i); - она и так уничтожается и заодно и список.

может есть еще варианты?
VintProg вне форума Ответить с цитированием
Старый 29.08.2009, 10:12   #5
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Она не уничтожается, а уничтожается указатель на эту пулю из списка.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 29.08.2009, 10:16   #6
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Вот как я удалял в своей игре игроков:
Код:
   if strtoint(numplayers.Text)<tplayerlist.Count then    //Если на сцене больше...
      repeat
        player:=tplayerlist.Items[tplayerlist.Count-1]; //..то удаляем
        player.destroy;
        tplayerlist.Delete(tplayerlist.Count-1);
      until (strtoint(numplayers.Text)=tplayerlist.Count);
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 29.08.2009, 10:17   #7
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Как сортировать ObjectList.
VintProg вне форума Ответить с цитированием
Старый 29.08.2009, 10:18   #8
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Цитата:
Вот как я удалял в своей игре игроков:
Тоже использовал класс TObjectList;
VintProg вне форума Ответить с цитированием
Старый 29.08.2009, 10:25   #9
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Вы лучше не умничайте, а попробуйте реально работающий код, а потом уже говорите работает или нет. А то нашлись тут гении...
И хватит для каждого вопроса создавать новую тему, юзайте гугл. Не удивительно что у вас такая репутация низкая...
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 29.08.2009, 10:29   #10
VintProg
not
Участник клуба
 
Аватар для VintProg
 
Регистрация: 27.06.2009
Сообщений: 1,399
По умолчанию

Код позже проверю и скажу работает или нет?

Цитата:
И хватит для каждого вопроса создавать новую тему
А если таких нет?
Цитата:
Не удивительно что у вас такая репутация низкая...
Не иза тем а иза глупости.
VintProg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Реализация скриптов в игре. Вадим Буренков Gamedev - cоздание игр: Unity, OpenGL, DirectX 135 09.08.2009 06:43
Автоматизация в игре axumac Свободное общение 3 22.01.2009 20:37
Звуки к игре Crivel Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 07.09.2008 23:40
OnMouseDown в игре. Titan123 Gamedev - cоздание игр: Unity, OpenGL, DirectX 10 29.07.2008 13:10
Препятствия в игре. Манжосов Денис :) Gamedev - cоздание игр: Unity, OpenGL, DirectX 2 07.06.2008 14:14