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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2008, 16:21   #91
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от mutabor
Цитата:
Сообщение от zetrix
извините, но мне кажется это бред...
И я того же мнения )
Или TickCount использовать или таймер, а то получается и то и другое и можно без хлеба.
Зрите в корень господа! ...кто сказал, что под каждое действие/явление/процесс/алгоритм нужно отдельный таймер? Если не таким образом как показал Kostia, то проще никак. Таймер задает минимальный интервал который отсчитывает такт, если понимаете что-то в электронике, то аналог этому - кварцевый генератор. Внутреннее условие с GetTickCount дает собственный отсчет для конкретного процесса. Одно из условий может управлять интервалом таймера (например изменение кадровки) и работой/остановкой последнего.

Код:
var
  time,time2,time3: integer;

procedure TForm1.FormCreate(Sender: TObject);
  begin
    time:=GetTickCount;
    time2:=GetTickCount;
    time3:=GetTickCount;
  end;

// интервал таймера меньше самой малой задержки в условиях
procedure TForm1.Timer1Timer(Sender: TObject);
  begin
    if GetTickCount - time >= 1000 then {процедура1}
    if GetTickCount - time2 >= 3000 then {процедура2}
    if GetTickCount - time3 >= 5000 then {процедура3}

    {процедура отрисовки}
  end;
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 10.06.2013 в 16:05.
Beermonza вне форума Ответить с цитированием
Старый 05.06.2008, 18:24   #92
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

И даже в этом случае TickCount юзать необязательно, достаточно переменной счетчика.

Конструкция с TickCount может заменить таймер (TTimer), когда вешается на Application.OnIdle. В остальных случаях есть таймер и его достаточно. А так получается двойная проверка, таймер тикнул, но мы ему не верим и проверим, а правильно ли он отсчитал? А кто проверит правильно ли TickCount отсчитал?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 05.06.2008, 19:31   #93
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Способов бывает много, причем один из равноценных не является абсурдным. Если интервалы условий выбирать кратными интервалу таймера, то все работает как нужно, за исключением если вам конкретно нужно "полтора землекопа". Бреда здесь нет
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 10.06.2013 в 16:07.
Beermonza вне форума Ответить с цитированием
Старый 08.06.2008, 23:33   #94
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

Эй, народ! Напишите еще пару уроков. Я еще начинающий, но большая часть того, что сдесь пишется(в этой теме) либо очень непонятна(когда начинают о чем-то своем спорить профессионалы) или очень простым и неинтересным. Я могу наверное сделать чего-нибуть несложное типа простых шашек, или змейки, или пазлов например. Но дальше не идет. Напишите например какую-нибудь игру типа "герой прыгает по платформам через весь уровень убивая плохих и собирая юонусы". Напишите, как вы бы создавали эту игру сами, но максимально просто, желательно вообще через канву. Например сначала движение главного героя и его гравитацию(разные пружки и пр.), потом удару главного героя и вообще какую-нибудь анимацию, потом загрузка уровня, потом расположение объектов, потом... Особое внимание уделите пожалуйста графике. Я думай это будет многим интересно, надеюсь я не один такой тупой. выручайте, люди. я в тупике - то что я могу сделать не приведет к моему прогрессу, а для остального я совсем не готов. я даже не знаю что конкретно можно спросить. Поэтому напишите еще пару уроков по созданию ИГР для НОВИЧКОВ.
Упс...
L_M вне форума Ответить с цитированием
Старый 09.06.2008, 05:39   #95
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,691
По умолчанию

http://www.programmersforum.ru/attac...2&d=1211033214
Это анимация. Стрелками влево, вправо, планета катится, как шар из боулинга.
Реализовать прыжки проще некуда. Заводите переменную sy, скорость по y и если под ногами у героя ничего нет, то прибавляем ускорение свободного падения к скорости, а по нажатию, прыжок, нужно просто sy присвоить какоенибудь отрицательное число, естественно если sy=0.
Ходьбу по платформам это тоже достаточно легко реализовать. Нужно проверить 4 точки героя на столкновение со всеми видимыми платформами(чтобы не тормозило). Две верхние и две нижние. Если одна из нижних столкнулась(если гг падает), то его sy:=0;, а если он подлетает, то нужно проверить, две верхние точки и при столкновении sy:=0; и тут гравитация притянет его к земле. При ходьбе влево вправо, тоже советую завести переменную sx, скорость по x. И проделать тоже самое, только точки нужно проверять слева и справа.
http://www.programmersforum.ru/showthread.php?t=20453, здесь описано как двигать экран.

Последний раз редактировалось Kostia; 09.06.2008 в 09:31.
Kostia вне форума Ответить с цитированием
Старый 09.06.2008, 16:39   #96
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию На канве...

Цитата:
Сообщение от L_M
... большая часть того, что сдесь пишется(в этой теме) либо очень непонятна(когда начинают о чем-то своем спорить профессионалы) или очень простым и неинтересным...
Простым оно кажется толко, если вы уже чему-то научились, это очень хорошо. А "споры" возникают только из-за хитровымудренности, каждый предлагает свой вариант, который использует, и это правильно. Ваша задача слушать и "впитывать". В жизни придется повстречаться с одними и теми же задачами, а вот заметить в них тонкости не удасться, если вы владеете только одним методом.
Цитата:
Сообщение от L_M
... Напишите например какую-нибудь игру типа "герой прыгает по платформам через весь уровень убивая плохих и собирая юонусы"....
Имеется в виду аркада. Написать готовое будет неверным с точки зрения самой темы, это как "препод, блин!, ...покажи ответ, немогу решить пример". Задача - научить Вас думать, и самостоятельно выбирать метод решения.
Цитата:
Сообщение от L_M
... Напишите, как вы бы создавали эту игру сами, но максимально просто, желательно вообще через канву...
Как работать с канвой было показано, Canvas.Draw применяется.

Вот вы утвердились, будет главный герой, он передвигается по уровням, прыгает, стреляет из оружия, собирает предметы, убивает противников, ...типичная аркада.
Создавать игру нужно со "скелета" - модели уровня, модели объектов, системы хранения ресурсов и использования ресурсов. Я со своей стороны конечно предложу в качестве модели уровня - двумерный массив. Передвижение героя по "невидимым клеткам" со смещением для плавного перехода. Возможно реализация покажется сложной, ... что скажут остальные, какие еще есть предложения?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 10.06.2013 в 16:09.
Beermonza вне форума Ответить с цитированием
Старый 09.06.2008, 17:59   #97
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Если графика на канве, то самое главное отойти от использования компонента TImage. Многие новички динамически создают массивы из TImage и помещают их на форму. Далеко не лучший способ. Единственная польза - научишься динамически создавать VCL объекты, если это кому нибудь надо )
Продолжение следует ...

p/s Сегодня уже нет времени, завтра порассуждаю на эту тему )
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 09.06.2008, 22:22   #98
L_M
Форумчанин Подтвердите свой е-майл
 
Регистрация: 25.02.2008
Сообщений: 289
По умолчанию

Ладно, тогда начнем. Вы предлагаете в качестве модели уровня двумерный массив. А что он будет хранить(из приведенного ниже)? Как связать проходимость(т.е. физику), свойства объектов и вывод графики? Массив имеется в виду на сколько: вся карта или по размеру экрана, где будут меняться данные при продвижении?
Упс...
L_M вне форума Ответить с цитированием
Старый 10.06.2008, 11:39   #99
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Физика - это не проходимость, физика - это симуляция естественного поведения предметов - отскакивание, подпрыгивание, сила трения, инерция и т.д. путем расчетов с помощью законов и формул физики.
В аркадах физики обычно нет, в той о к-рой ты говорил точно нет.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 10.06.2008, 18:11   #100
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию Модель аркадного уровня

Пожалуй начнем.
Данный метод построения модели "игрового пространства" может быть с успехом применен для любых игр, как 2D, так и 3D.

Представьте себе тетрадный лист в клеточку. Каждая клетка листа служит нам элементарной единицей пространства. Двумерный массив - математическая модель этого "тетрадного листа" (игрового пространства). Но в клетку массива обычно можно записать определенное значение некоторого типа. Для реализации множества параметров клетки (рисунок, проходимость, и пр.) потребуется "определить" эту клетку как собственный тип. Вот как это делается:
Код:
// тип модели уровня
Type
  TGameMap = object
  //-----------------
  TGTexture: TBitmap; {текстура}
  TGMove:    Byte;      {проходимость: 1 - нельзя, 0 - можно}
  //-----------------
end;
Теперь остается создать двумерный массив и задать ему вышеуказанный тип (пределы устанавливайте по-усмотрению):

Код:
Var
  MapMas: array[0..39, 0..29] of TGameMap;
Все, модель готова.
Попробуем создать буфер кадра, в котором будет производиться построение, перед финальным выводом на экран, ... также загрузим картинки. Тут же построим игровой уровень, ...я покажу самый простой, статичный метод:

Код:
procedure TForm1.FormCreate(Sender: TObject);
begin
// создается буфер кадра
  BitBuf:=TBitmap.Create;
  BitBuf.Width:=800;
  BitBuf.Height:=600;
// размеры формы
  Form1.Width:=800;
  Form1.Height:=600;
// размер клетки
  cell:=20;
// загрузка картинок
  wall:=TBitmap.Create;
  wall.LoadFromFile('wall.bmp');
  brg:=TBitmap.Create;
  brg.LoadFromFile('brg.bmp');

// простейшим образом создается уровень
  for y:=0 to 28 do
    begin
      for x:=0 to 39 do
        begin
          if (y=28)
             or ((y=25) and (x>=5) and (x<=10))
             or ((y=23) and (x>=15) and (x<=20))
             or ((y=21) and (x>=25) and (x<=30)) then
            begin
              // картинка мостика, "в нем" ходить нельзя
              MapMas[x,y].TGTexture:=brg;
              MapMas[x,y].TGMove:=1;
            end
          else
            begin
              // картинка заднего фона, ходить можно
              MapMas[x,y].TGTexture:=wall;
              MapMas[x,y].TGMove:=0;
            end;
        end;
    end;

end;
В данном случае, карта будет ограничена снизу, и три полочки зададут некоторые объекты уровня. В последствии вам придется с помощью редактора создавать уровни, точнее их "скелеты", и в игре динамически подгружать.

Обновление кадра будет выполняться в таймере вот таким образом:

Код:
// обновление кадра
  for y:=0 to 28 do
    for x:=0 to 39 do
      BitBuf.Canvas.Draw(x*cell,y*cell,MapMas[x,y].TGTexture);
Теперь про сам вывод изображения на экран. Будем выводить прямо в форму, используем контекст Windows, для вывода данных. Процедура вывода:

Код:
// процедура вывода изображения на форму
procedure TForm1.WMPaint(var Message: TWMPaint);
begin
   DC:=Message.DC;
   If DC=0 then DC:=BeginPaint(handle,PS);
   Try
     BitBlt(DC,0,0,800,600,BitBuf.Canvas.Handle,0,0,SRCCOPY);
   Finally
      If Message.DC=0 then EndPaint(handle,PS);
   end;
end;
Вызов процедуры выполняется так:

Код:
// вывод изображения на экран      
  M.DC:=GetDC(handle);
  WMPaint(M);
  ReleaseDC(handle, DC);
  DeleteDC(DC);
Этот вызов должен выполняться в самом конце, после завершения построения кадра, всегда.

Вот в принципе и все с моделью игрового пространства. Дальше будем разбирать модель персонажа, при условии, что знатоки помогут найти более простой способ, или просто что-то предложат
Вложения
Тип файла: zip TestLevel.zip (7.6 Кб, 297 просмотров)
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 10.06.2013 в 16:13.
Beermonza вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Хорошие уроки Render Общие вопросы Delphi 9 15.09.2012 07:13
Акцесс вопросы новичков Yaga Помощь студентам 4 02.06.2008 00:16
Учебники для новичков в програмировании Рар Общие вопросы Delphi 6 08.01.2007 08:07