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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2009, 20:33   #41
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Beermonza рекомендовал использовать тип юнитов record или packed record.
Я так и не понял как тут можно использовать record вместо class
Ведь в record'е можно писать только переменные , а в классе переменные, процедуры и функции.Я считаю, что в данном случае использовать record не получится и не имеет смысла.

Цитата:
Пример в моей теме про собственные типы есть.
Насчет примера:
Мне кажется для создание юнита нужно использовать не Reord, а class так как для каждого юнита не нужно писать собственные процедуры и функции.Такая-же система в последней версии игры(в первом релизе для каждого врага надо было писать собственный код)
Вадим Буренков вне форума Ответить с цитированием
Старый 26.03.2009, 21:46   #42
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Вадим Буренков, а разве для процедур собственного класса формы мало? Все объекты подчиняются определенному своему типу, но несут в себе общие возможности их манипулированием. Например, и персонаж в игре и ИИ суть - игровые объекты, могут двигаться, могут умирать, могут появляться. Какие вы знаете сверхъестественные процедуры, которые обязательно должны быть собственные для классов объектов? Рациональнее использовать одну процедуру или функцию, "подавая на вход" объект, и "получая на выходе" конкретный набор изменений.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 26.03.2009, 23:40   #43
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
а разве для процедур собственного класса формы мало?
Цитата:
Какие вы знаете сверхъестественные процедуры, которые обязательно должны быть собственные для классов объектов? Рациональнее использовать одну процедуру или функцию, "подавая на вход" объект, и "получая на выходе" конкретный набор изменений.
Может я не прав, но приведу пример из этой игры:

Код:
TEnemy = class {класс врага}         //OK
   Enemy: Tbitmap;  //изображение врага
   Boom: Tbitmap; // анимация взрыва
   Xpos,Ypos:integer;//позиция врага
   Xspeed, Yspeed:integer;//скорость врага
   EnemyBorn : boolean;//появился ли враг?
   Procedure LoadMem;
   Procedure FreeMem;
   Procedure CreateEnemy;
   procedure DestroyEnemy;
   procedure DrawEnemy;
end;
Этот класс включает переменные и процедуры для 'врага'
Я могу создать его
Код:
var
Enemy:Tenemy;
обращаться к его переменным
Код:
Enemy.EnemyBorn:=true;
и процедурам
Код:
Enemy.CreateEnemy;
Благодаря такому подходу я могу создать сколько угодно 'врагов', и для каждого мне не придется писать один и тот же код.
Цитата:
Я бегло просмотрел твой исходник последний. Beermonza рекомендовал использовать тип юнитов record или packed record.
Так зачем использовать record?Каким еще образом можно реализовать приведенный выше код не усложняя его?(если можно приведите пример)
Вадим Буренков вне форума Ответить с цитированием
Старый 27.03.2009, 09:14   #44
Алекс Ялта
Пользователь
 
Аватар для Алекс Ялта
 
Регистрация: 27.01.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от Вадим Буренков Посмотреть сообщение

Так зачем использовать record?Каким еще образом можно реализовать приведенный выше код не усложняя его?(если можно приведите пример)
Пример уже приведен в посте 154 "Уроков для новичков", а также наглядный пример и более упрощенный в моем примере в теме "собственный тип юнитов". Спорить не имеет смысла. Сначала почитай примеры.
Алекс Ялта вне форума Ответить с цитированием
Старый 27.03.2009, 10:10   #45
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Я прочитал пост 154. В нем, как я понял используется packed record для юнитов, сами юниты занесены в массив(я делал точно также),а процедура управления юнитами находится в классе формы.
Я же создаю собственный класс, и процедура управления юнитами находится в этом классе.Можно сказать что нет разницы, но для меня этот вариант лучше, поскольку ВСЁ тоносящееся к юнитам будет в этом классе.
Еще одно: в примере (пост 155) показывается перемещение всех юнитов с помощью оператора for. А что если нужно передвинуть только одного юнита? В случае использования классов для перемещения всех я буду использовать:
Код:
For n:=1 to MAXUnits do Unit[n].move (move - процедура движения)
Для перемещения одного я буду использовать:
Код:
Unit[n].move (n-номен юнита)
А каким образом реализовать движение одного юнита в примере?И самое главное, станет ли код проще от этого?

Последний раз редактировалось Вадим Буренков; 27.03.2009 в 10:12.
Вадим Буренков вне форума Ответить с цитированием
Старый 27.03.2009, 10:40   #46
Алекс Ялта
Пользователь
 
Аватар для Алекс Ялта
 
Регистрация: 27.01.2009
Сообщений: 97
По умолчанию

Цитата:
Сообщение от Вадим Буренков Посмотреть сообщение
Еще одно: в примере (пост 155) показывается перемещение всех юнитов с помощью оператора for. А что если нужно передвинуть только одного юнита?

А каким образом реализовать движение одного юнита в примере?И самое главное, станет ли код проще от этого?
Невнимательно читал. UUses - флаг использования, Ugo - флаг перемещения

Код:
for i:=0 to 255 do
    begin
      with UnitMas[i] do
        begin
          if UUses and UGo then
Тем более, если тебе удобнее делать так, как ты делаешь, хуже от этого никому не станет. Главное, чтобы код был рабочий и ты сам в нем мог разобраться. А пример от Beermonza можно считать общепринятым правильным решением.
Алекс Ялта вне форума Ответить с цитированием
Старый 27.03.2009, 11:02   #47
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Вот еще одна версия с 5 оружиями. Переключение клавишами 1-5(после того как выбрал оружие нужно подождать когда оно перезарядится).
Есть одна проблема с ракетой, она вырисовывается с белым фоном(скорее всего из за изображения).Ты можешь исправить?
Вложения
Тип файла: rar Many Enemies + 5 weapons.rar (500.2 Кб, 36 просмотров)

Последний раз редактировалось Вадим Буренков; 27.03.2009 в 11:11.
Вадим Буренков вне форума Ответить с цитированием
Старый 27.03.2009, 11:41   #48
Алекс Ялта
Пользователь
 
Аватар для Алекс Ялта
 
Регистрация: 27.01.2009
Сообщений: 97
По умолчанию

Нужно при создании ракеты указать TransparentColor:=clWhite; Там проблема при создании Битмапа. Он у тебя создается с чужими параметрами. Ты где-то, видимо, прописал универсальный TransparentColor.
Алекс Ялта вне форума Ответить с цитированием
Старый 27.03.2009, 12:27   #49
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Теперь все работает.
Ты можешь сделать класс TEffects? Я в анимациях понимаю очень плохо.
Вот как я себе это представляю:

Код:
TEffects = class {класс эффектов}
Xpos,Ypos:integer;
Effect: array [1..MaxFrame] of Tbitmap; //массив кадров
//остальные переменные

procedure LoadMem(параметры, определяющие количество кадров и их файлы); //занесение кадров анимации  в массив.
procedure FreeMem; //освобождение массива
procedure CreateEffect(Xpos,Ypos:integer);//создание эффекта по координатам Xpos и Ypos.
//остальные процедуры
end;
Я начал делать коллизию.Во время столкновения пули и противника должна вызываться процедура класса CreateEffect(координаты противника).
Вадим Буренков вне форума Ответить с цитированием
Старый 27.03.2009, 12:28   #50
Алекс Ялта
Пользователь
 
Аватар для Алекс Ялта
 
Регистрация: 27.01.2009
Сообщений: 97
По умолчанию

Я смогу этим заняться только с понедельника. Сегодня после работы уезжаю на выходные.
Алекс Ялта вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моя первая программа igroman Софт 27 12.03.2009 20:23
моя первая програма... maziLa Общие вопросы C/C++ 7 12.03.2009 08:14
Моя первая программа)) Dr.Badnezz Софт 9 06.12.2008 14:39
Моя первая и последняя игра. BangBangFM Gamedev - cоздание игр: Unity, OpenGL, DirectX 13 05.12.2008 22:12
Моя первая программа NikLik Софт 4 20.07.2008 00:24