Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Цитата:
Сообщение от 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,928
Репутация: 1570

icq: 401708834
По умолчанию

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

Конструкция с TickCount может заменить таймер (TTimer), когда вешается на Application.OnIdle. В остальных случаях есть таймер и его достаточно. А так получается двойная проверка, таймер тикнул, но мы ему не верим и проверим, а правильно ли он отсчитал? А кто проверит правильно ли TickCount отсчитал?
mutabor вне форума   Ответить с цитированием
Старый 05.06.2008, 19:31   #93
Beermonza
Инженер ИС
Профессионал
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Репутация: 746
По умолчанию

Способов бывает много, причем один из равноценных не является абсурдным. Если интервалы условий выбирать кратными интервалу таймера, то все работает как нужно, за исключением если вам конкретно нужно "полтора землекопа". Бреда здесь нет
__________________
Руководитель проекта 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
Репутация: 41

icq: 563981551
По умолчанию

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

icq: 426824418
По умолчанию

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
Репутация: 746
По умолчанию На канве...

Цитата:
Сообщение от 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,928
Репутация: 1570

icq: 401708834
По умолчанию

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

p/s Сегодня уже нет времени, завтра порассуждаю на эту тему )
mutabor вне форума   Ответить с цитированием
Старый 09.06.2008, 22:22   #98
L_M
ФорумчанинФорумчанин
 
Регистрация: 25.02.2008
Сообщений: 289
Репутация: 41

icq: 563981551
По умолчанию

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

icq: 401708834
По умолчанию

Физика - это не проходимость, физика - это симуляция естественного поведения предметов - отскакивание, подпрыгивание, сила трения, инерция и т.д. путем расчетов с помощью законов и формул физики.
В аркадах физики обычно нет, в той о к-рой ты говорил точно нет.
mutabor вне форума   Ответить с цитированием
Старый 10.06.2008, 18:11   #100
Beermonza
Инженер ИС
Профессионал
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
Репутация: 746
По умолчанию Модель аркадного уровня

Пожалуй начнем.
Данный метод построения модели "игрового пространства" может быть с успехом применен для любых игр, как 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 Кб, 287 просмотров)
__________________
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


15:48.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru