Вопросы от Bercut (7) - Проблема - решение. GML и прочее. - Разработка игр на Game Maker (Simple Mode) - Форум Game Maker. Разработка игр.
Здравствуй Гость | Перейти на сайт

Главная | Форум | Регистрация | Войти
gmaker.net ;) [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 7 из 11«12567891011»
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Вопросы от Bercut (все адекватно...)
Вопросы от Bercut
Ninja Дата: Четверг, 28.01.2010, 23:38 | Сообщение # 121
Хоть палкой гони
Группа: Проверенные
Сообщений: 683
Статус: Offline
ошибка будет если в событии создания создаваемого объекта нужно будет обратиться к этим переменным


Oh, my God! You kill Kenny! You bastard!
 
Bercut Дата: Воскресенье, 31.01.2010, 22:48 | Сообщение # 122
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Quote (Ninja)
ошибка будет если в событии создания создаваемого объекта нужно будет обратиться к этим переменным

Да, спасибо, я всё понял, так оно и было.

Короче начал пробывать анимации на сетке по дискретному способу, который предложил Ang3L.
Только вот анимация выходит очень коряво.
Например здесь перс движется рывками:
Ang3L, ничего не переделывал, только убрал почти все движения и изменил размер клетки.
0 - блок, 1 -воздух.
Link

З.Ы.:
Вопрос дурацкий, наверное, но просто не пойму простого принципа анимации для это вида решения.



Fast, like fire!

Сообщение отредактировал Bercut - Воскресенье, 31.01.2010, 22:50
 
Ang3L Дата: Понедельник, 01.02.2010, 00:08 | Сообщение # 123
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (Bercut)
Вопрос дурацкий, наверное, но просто не пойму простого принципа анимации для это вида решения.

cheesygrin Не так это и просто! Корочь, смысл каков. Что делают обычно все создатели платформеров? Они перемещают образцы. Типа:
Code
if(клик вправо)
     x += 1;

В дискретном другая технология: Мы меняем анимацию в зависимости от ситуаций. Разница понятна?

В одном случае меняем позицию, в другом анимацию. Конечно, оба эти стили предполагают как смену положения, так и смену анимаций, НО делают они это по разному.

Пока перс стоит мы рисуем анимацию spr_stay_right. Когда нам нужно передвинуть его направо устанавливаем анимацию spr_hero_walk_right. И секрет дискретного перемещения в самой анимации. при переходе с одной анимаций в другу они должны плавно сменять друг друга. Это первое. Второе, это то что анимации должны быть в стык, т.е. накладываться друг на друга. Это получается своего рода интерактивный мультфильм. Кадры сменяют друг друга, и надо очень чётко следить за анимацией. Вот первое что я заметил это то что в спрайте spr_stay_right перс стоит по середине, а spr_hero_walk_right заканчивает чуть дальше середины и когда анимация переходит с spr_hero_walk_right в spr_stay_right перс двигается назад (6 кадр в анимации ходьбы лишний). Потом 5 кадров для перемещения мало, у меня для шарика было по 12 кадров, а чела надо будет кадров 18-25. Халтурщик! happy

P.S.: Можно тебе упростить задачу: отрисовывай контуры своих спрайтов, чтобы увидеть, а в стык ли они? И проигрывай кадры медленно, сделай скорость анимации или комнаты очень низкой, чтобы тебе наглядно понять в чём смысл. И ты прежде чем стирать мои спрайты посмотрел бы как они нарисованы, можешь разложить их в фотожопе или в другой программе и попробовать проанализировать их.

Добавлено (01.02.2010, 00:08)
---------------------------------------------
Bercut, в Prince of Persia для упрощения рисования перса был использован метод ротоскопии - т.е. реальный человек записывается на видеокамеру, раскладывается на кадры в граф. редакторе, и вырисовывается в пиксель арт или любой другой стиль (оставлять в видео проблематично будет, любительская видеокамера будет давать много шумов и кадры в стык будет сложно сделать).



Blogpost
 
Bercut Дата: Понедельник, 01.02.2010, 01:57 | Сообщение # 124
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Quote (Ang3L)
И секрет дискретного перемещения в самой анимации. при переходе с одной анимаций в другу они должны плавно сменять друг друга.

Я просмотрел ещё раз весь пример с сеткой, понял, что каждый шаг, там играется определённая анимация по кадрово, то есть можно её спокойно прервать и продолжить другую (например, анимация боли)?
Каким образом добиться, так чтобы анимации плавно друг друга сменяли?

Quote (Ang3L)
Второе, это то что анимации должны быть в стык, т.е. накладываться друг на друга. Это получается своего рода интерактивный мультфильм. Кадры сменяют друг друга, и надо очень чётко следить за анимацией. Вот первое что я заметил это то что в спрайте spr_stay_right перс стоит по середине, а spr_hero_walk_right заканчивает чуть дальше середины и когда анимация переходит с spr_hero_walk_right в spr_stay_right перс двигается назад (6 кадр в анимации ходьбы лишний).

Да, дурак я. Разобрался с этим, всё, теперь отлично, даже от нуля =-)

Quote (Ang3L)
Халтурщик!

=-( Ну это всего лишь тест, просто руки золотые, но растут из попы.

Quote (Ang3L)
Можно тебе упростить задачу: отрисовывай контуры своих спрайтов, чтобы увидеть, а в стык ли они? И проигрывай кадры медленно,

Хочу программу для этих целей сделать, точнее уже что-то есть, как доделаю Гуй, то и сделаю программу.

Quote (Ang3L)
И ты прежде чем стирать мои спрайты посмотрел бы как они нарисованы

Я и не стирал, только лишь код перенёс.
Спрайты смотрел, но просто сути не уловил, теперь всё понял =-)
Дурная моя голова...
Quote (Ang3L)
в Prince of Persia для упрощения рисования перса был использован метод ротоскопии

Ну понял, ведь сложно иногда нарисовать реалистичную анимацию =-)


Fast, like fire!
 
Ang3L Дата: Понедельник, 01.02.2010, 02:48 | Сообщение # 125
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (Bercut)
Каким образом добиться, так чтобы анимации плавно друг друга сменяли?

Блин! Я ж программист, а не мультипликатор! cheesygrin С такими вопросами к DragonSkin'у. wink Пытайся сделать так чтобы первый кадр след. анимации был продолжением предыдущей, вот ключ к успеху.

Quote (Bercut)
то есть можно её спокойно прервать и продолжить другую

Это сложная технология. Не для ГМ во всяком случае. Вот для 3д:
Quote (Wiki)
euphoria (русск. эйфория) — программное средство для создания процедурной анимации, работающее в режиме реального времени, разработанное компанией NaturalMotion на основе технологии «Dynamic Motion Synthesis» (русск. «Динамический Синтез Движений»).

Технология «euphoria» применяется для анимации трёхмерных персонажей «на лету» и «базируется на полной симуляции трёхмерного персонажа, включая его тело, мускулы и моторную нервную систему».[2] Вместо того, чтобы использовать предопределённые анимации, действия и реакции персонажей синтезируются (просчитываются) в реальном времени; эти анимации каждый раз являются особенными, неидентичными к предыдущим, даже если повторяется одна и та же самая сцена.

В то время, когда традиционные физические движки используют физику ragdoll (физику «тряпичной куклы») для анимаций, сгенерированных на лету, euphoria использует более комплексный метод для анимации физически связанных (англ. physically-bound) объектов во всей полноте внутри игрового окружения. Разработчик может создать несколько ключевых кадров для анимации (например, анимация ходьбы человека), в то время, как движок создаст промежуточные. Это способствует более реалистичному отображению сложной анимации.


Возможно, но это только возможно, можно создать подобную технологию и в 2д. Ну если только попробовать, но я читал что это очень непросто сделать. Кстать, посмотри видюшки для Euphoria, увидишь какая классная анимация получается (не покадровая конечно, но тоже шик. Можно увидеть ещё только в GTA IV, насколько я знаю. Смотрится супер.).

Quote (Bercut)
=-( Ну это всего лишь тест, просто руки золотые, но растут из попы.

Да это шутка! Дело не может получится, если ты делаешь его впервые. Нужно тренироваться, понять идею и потом её разрабатывать. Главное в этом стиле игры надо понять, что главное не программирование (если конечно ты не собираешься делать аналог Euphoria в 2д), а анимация, художества. Лично я потратил 75% на анимацию и только 25% на код (может я просто не художник?).

Quote (Bercut)
Хочу программу для этих целей сделать, точнее уже что-то есть, как доделаю Гуй, то и сделаю программу.

Лучше поищи в сети, наверняка такая есть. Помню была такая в 90-х, Disney Studio называлась, или как-то так (там несколько предыдущих кадров как бы были полупрозрачные и накладывались друг на друга, за счёт этого можно было удобно совмещать кадры). Я чёт не нашёл, но есть такая Anime Studio.

Quote (Bercut)
Ну понял, ведь сложно иногда нарисовать реалистичную анимацию =-)

Это не такая сложная сколько кропотливая работа. У тебя будет 15-20 анимаций на персонажа + несколько врагов. Допустим 9 врагов и 1 персонаж ГГ, т.е. где-то 150-200 анимации, т.е. где-то 2 250-6 000 всего кадров анимации которые надо нарисовать, причём красиво. Если это делать вручную, без помощи аниматорских программ, это может занять длительное время. Зато будет очень эффектно.

Но в основном делают так (что в 2д, что в 3д): рисуют персонажа на месте и перемещающегося. Изменяется анимация резко, без плавных переходов. При перемещений персонажа скорость перемещения объекта стараются подобрать под скорость анимации, но это удаётся не всегда (допустим подбирается под баланс в стратегиях) и тогда получается эффект "бегущего на месте" (или рассинхронизация скорости объекта и скорости анимации в угоду баланса). Этот эффект можно увидеть почти в каждой 3д игре. Это смотрится не очень, зато дешево и сердито, и технология стара как мир.



Blogpost
 
Bercut Дата: Понедельник, 01.02.2010, 03:03 | Сообщение # 126
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Quote (Ang3L)
ытайся сделать так чтобы первый кадр след. анимации был продолжением предыдущей, вот ключ к успеху.

Понял, уже что-то наваял =-)

Quote (Ang3L)
Возможно, но это только возможно, можно создать подобную технологию и в 2д. Ну если только попробовать, но я читал что это очень непросто сделать. Кстать, посмотри видюшки для Euphoria, увидишь какая классная анимация получается (не покадровая конечно, но тоже шик. Можно увидеть ещё только в GTA IV, насколько я знаю. Смотрится супер.).

Хорошо, я посмотрю, надо же как-то просвящаться =-)

Quote (Ang3L)
Лучше поищи в сети, наверняка такая есть. Помню была такая в 90-х, Disney Studio называлась, или как-то так (там несколько предыдущих кадров как бы были полупрозрачные и накладывались друг на друга, за счёт этого можно было удобно совмещать кадры). Я чёт не нашёл, но есть такая Anime Studio.

Спасибо за совет.
Просто прогу пишу не только для себя, но и для своих дизайнеров, а то они разленились, не слышно и не видно,
ну думаю, ща сессия пройдёт всё будет в порядке =-)

Quote (Ang3L)
Это не такая сложная сколько кропотливая работа. У тебя будет 15-20 анимаций на персонажа + несколько врагов. Допустим 9 врагов и 1 персонаж ГГ, т.е. где-то 150-200 анимации, т.е. где-то 2 250-6 000 всего кадров анимации которые надо нарисовать, причём красиво. Если это делать вручную, без помощи аниматорских программ, это может занять длительное время. Зато будет очень эффектно.

Ну вот, будет им работа happy

Quote (Ang3L)
Но в основном делают так (что в 2д, что в 3д): рисуют персонажа на месте и перемещающегося. Изменяется анимация резко, без плавных переходов. При перемещений персонажа скорость перемещения объекта стараются подобрать под скорость анимации, но это удаётся не всегда (допустим подбирается под баланс в стратегиях) и тогда получается эффект "бегущего на месте" (или рассинхронизация скорости объекта и скорости анимации в угоду баланса). Этот эффект можно увидеть почти в каждой 3д игре. Это смотрится не очень, зато дешево и сердито, и технология стара как мир.

Понял на счёт этого, с такой технологией можно столкнуться в конструкторе RPGMaker.

Кстати, переиграл в Принца Персии, проверил анимацию, да ходи он именно по такой системе, только не всегда чётко останавливается в центре клетки, с чем это связано?

З.Ы.:
Опробывал программу Anime Studio, до чего же она неудобна для этого дела, надо искать альтернтиву.
Очень удобен Corel PhotoPaint, просто как-то интерфейс Адобе, для меня не дружелюбен, за исключением Audition.
Жаль что в короле нельзя делать, то что надо =-(



Fast, like fire!

Сообщение отредактировал Bercut - Понедельник, 01.02.2010, 09:29
 
Ang3L Дата: Понедельник, 01.02.2010, 13:37 | Сообщение # 127
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (Bercut)
Кстати, переиграл в Принца Персии, проверил анимацию, да ходи он именно по такой системе, только не всегда чётко останавливается в центре клетки, с чем это связано?

Я над этим тоже думал. Это, наверное, потому что размер блоков не кратен размеру персонажа. У меня то размер персонажа и блока были равны, а что если шарик был бы в 3 - 4 раза меньше по ширине? Тогда бы он тоже вставал не только по центру (а если размер блока был бы 64, а шарика 36, то он бы мог вставать практически в любом месте. Но здесь нужна "синхронизация", например, иногда Принц не подходит к краю слишком близко, но если просто нажать влево/вправо, то он упадёт. В этом случае зажимается шифт и он подходит вплотную к краю, но не упадёт, как бы "синхронизировался" с блоками). Это тоже можно проверить, но у меня нет такой плавной анимации персонажа, а рисовать сам я не буду, хотя я очень люблю такой стиль игры.


Blogpost
 
Bercut Дата: Вторник, 02.02.2010, 15:37 | Сообщение # 128
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Немного исправил анимацию, всё тоже самое, только вниз- садиться, энтер - удар ногой, а вот с присиданием не получается, и так и так мучал, короче идея такая.
При нажатии клавиши вниз играется анимация присидания, в любой шаг можно отжать клавишу и присидание прикратиться.
Анимация закончилась и если мы держим клавишу вниз, то персонаж сидит, если отжимает, то играем обратную анимацию, анимацию вставания персонажа, собстенно и так и так крутил, но почему-то глюки.
Ну например как быть с ящиком?
Рядом с персонажем, например на x+1 клетке стоит ящик, чтобы с ним взаимодействовать используем клавишу 'E' (ну это допустим, если мы хотим из одного и того же положения толкать или тянуть ящик).
Если рядом ящик и мы к нему повёрнуты и нажата клавиша 'E', то играть анимацию приближения к ящику.
И пока мы ещё раз не нажмём 'E' не прекращать взаимодействие с ящиком, то есть рисовать последний кадр, например как персонаж держит ящик.
Если мы взаимодействуем с ящиком, то при нажатии клавиш влево и вправо двигаемся в соответствующие стороны, то есть толкаем/тянем ящик.
Вообще много вопросов по взаимодейтвию, хотя я примерно знаю как всё это решить.
Понимаю, что это вещи из вида "сделай игру за меня", но я тоже постараюсь вас не утруждать.

Ссылка на пример:

Link 176 кб



Fast, like fire!
 
DreamRunner Дата: Вторник, 02.02.2010, 16:08 | Сообщение # 129
Админ
Группа: Админы
Сообщений: 1382
Статус: Offline
Как сделать приседание (да и всё остальное):
Code

if фаза == СТОИТ
{
   перс стоит, спрайт кадр установили
   Нажали вниз -> фаза = САДИТСЯ
}

if фаза== САДИТСЯ
{
   сменили спрайт, играем его до последнего кадра.
   Если последний кадр -> фаза = СИДИМ
}

if фаза== САДИТСЯ
{
  сменили спрайт
   Если отжали кнопку ->ВСТАЁМ
}

Метод конечных автоматов. У меня так сделано даже в простенькой аркаде. Так не запутаешься в условиях.

 
Ang3L Дата: Вторник, 02.02.2010, 16:26 | Сообщение # 130
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (Bercut)
анимацию вставания персонажа, собстенно и так и так крутил, но почему-то глюки.

Code
if(subimage < subimages - 1)
     subimage += 1;

Это код о чём говорит? О том что выбираем след. кадр. Анимации вставания я у тебя не видел, значит здесь должна быть обратная анимация: subimage -= 1; Где и как это вставлять подумаешь сам. Т.е. либо делаешь анимацию вставания, либо карпишь над обратной анимацией.

Quote (Bercut)
Ну например как быть с ящиком? Рядом с персонажем, например на x+1 клетке стоит ящик, чтобы с ним взаимодействовать используем клавишу 'E' (ну это допустим, если мы хотим из одного и того же положения толкать или тянуть ящик). Если рядом ящик и мы к нему повёрнуты и нажата клавиша 'E', то играть анимацию приближения к ящику. И пока мы ещё раз не нажмём 'E' не прекращать взаимодействие с ящиком, то есть рисовать последний кадр, например как персонаж держит ящик. Если мы взаимодействуем с ящиком, то при нажатии клавиш влево и вправо двигаемся в соответствующие стороны, то есть толкаем/тянем ящик.

Примерно так и есть.

Чтобы анимации были гладкими между ними надо делать переходные состояния. Стоим -> Начинаем идти -> Идём -> Заканчиваем идти -> Стоим -> Начинаем бег -> Бежим -> Переходим на шаг -> Заканчиваем идти -> Стоим -> Приседаем -> Сидим -> Кидаем бомбу из положения сидя -> Встаём из положения сидя -> ... и т.д. Незабываем что этот стиль игры основан на недетерминированном КА, поэтому тебе его необходимо изучить,. чтобы понять лучше (т.е. переход из одного состояния может быть в один из нескольких. Из положения стоя можно войти как в "Начинаем идти из положения стоя", так и в "Начинаем бег из положения стоя"). И здесь нужно продумать как грамотные переходы из состояния в состояние так и анимацию на каждое такое действие. Ведь можно побежать из положения лёжа, такое может быть возможно через переход состояния, но если анимации перехода не будет, будут "глюки".



Blogpost
 
Bercut Дата: Вторник, 02.02.2010, 16:48 | Сообщение # 131
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Quote (DreamRunner)
Метод конечных автоматов. У меня так сделано даже в простенькой аркаде. Так не запутаешься в условиях.

Понял, ну всё же придётся внести поправки с соотетсвием кода, но всё равно понял, спасибо.

Quote (Ang3L)
Это код о чём говорит?

Ну сознаюсь, да именно о проигрывании следуюшего кадра, если началась анимация, кстати, а если убрать
точку с запятой после subimage += 1, то ошибки ведь не будет?
просто обычно после условия не ставится точка с запятой, если ставиться иначе, или в Си так можно?

Quote (Ang3L)
Чтобы анимации были гладкими между ними надо делать переходные состояния.

Да, думал над этим.

Quote (Ang3L)
Незабываем что этот стиль игры основан на недетерминированном КА

Спасибо, думаю информация здесь достаточно исчерпывающая.


Fast, like fire!
 
Ang3L Дата: Вторник, 02.02.2010, 17:26 | Сообщение # 132
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (Bercut)
после условия не ставится точка с запятой

Ни в одном известном мне языке не ставится точка с запятой после условия. После условия всегда идёт выражение. В С++ каждое выражение должно оканчиваться точкой с запятой (это я и стараюсь соблюдать).

Code
if(subimage < subimages - 1) //условие. Если не последний кадр в анимации, то
      subimage += 1; //выражение. Выбираем след. кадр.

Quote (Bercut)
думаю информация здесь достаточно исчерпывающая.

Ещё не смотрел твою ссылку, но есть хорошая информация на Wiki.


Blogpost
 
Bercut Дата: Вторник, 02.02.2010, 17:39 | Сообщение # 133
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Я про это:

Code
if(!anim)
{
//Условия для анимации
}
else
{
if(subimage < subimages - 1)
subimage += 1; // Если здесь стоит точка с запятой, то ниже написанное не отностится к этому условию
else // вот здесь не понятна логика тогда
{
sprite = sPersonStay;

subimages = 1;
subimage = 0;

_x += goto_x;
goto_x = 0;

_y += goto_y;
goto_y = 0;

anim = false;
}
}


Fast, like fire!

Сообщение отредактировал Bercut - Вторник, 02.02.2010, 17:40
 
Ang3L Дата: Вторник, 02.02.2010, 18:13 | Сообщение # 134
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (Bercut)
if(subimage < subimages - 1)
subimage += 1; // Если здесь стоит точка с запятой, то ниже написанное не отностится к этому условию
else // вот здесь не понятна логика тогда

Quote
то ниже написанное не относится к этому условию

Это с какого перепугу? happy

Code
if(subimage < subimages - 1)
{
     выражение;
}
else
{
     выражение;
}

Или сокращённый вариант:

Code
if(subimage < subimages - 1)
     выражение;
else
     выражение;

Скобки можно опустить если идёт только 1 выражение.



Blogpost
 
DragonSkiN Дата: Вторник, 02.02.2010, 18:20 | Сообщение # 135
Всех уже задолбал
Группа: Страж
Сообщений: 1180
Статус: Offline
и вообще, чтобы потом самому не путаться, лучше использовать {}


http://gamegraphycs.do.am/ - сайт о 2D графике
http://dragonskin.ath.cx:777/- доступ по хттп к сборнику ресурсов для игр
 
Bercut Дата: Пятница, 05.02.2010, 16:53 | Сообщение # 136
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Блин, аладушек, фигня, это я виноват, прости, какбэ к сведенью, виноват паскаль, ибо при выражении вида в нём:
Code

   if (x = 10) then
     writeln ('Блаблабла);
   else
    writeln ('Неблаблабла');

выдаст ошибку, о том, что перед else надо убрать точку с запятой.
Логика ясна, да =-)

Добавлено (05.02.2010, 16:53)
---------------------------------------------
А что делать, если я хочу резко остановиться или ударить, ведь при этом способе у нас произойдёт рассинхронизация =-(
Я поиграл в Тин Тун и в Червяка Джима, пробывал анализировать, не получается, всю голову сломал, как жэ там сделано, но подумал над тем что говорил Дрим, ну он говорил, что в 8-ом появились маски на каждый кадр, проект я так и не разобрал, слишком большой и сложный =-(
У Drunce Вроде бы всё ясно, там что-то на подобе, поэтому пришёл к выводу, что каким-то образом надо считать положение в клетки и возможность выполнения какого-либо действия.
У Drunce в проекте oneStep используется скоростоть и размер чара, то есть пока персонаж не достигнет определённой кондиции для клетки, то столкновения не произойдёт.
Кстати, в Тини Туне размер тайла 16x16, а что можно сказать о размере клетки, мб тоже 16 на 16, тогда персонаж занимает 6 клеток, то есть 2X3, как так возможно построить синхронизацию.
И просто и сложно не нравится такая ходьба, тем, с кем работаю, тоже не понравилось, извините, что мучаю вас, просто серьезно, ломаю голову, нужны лишь небольшие подсказки, дохожу медленно, и также делаю, потому что сдаю экзамены, скоро закончу и всё пойдёт в гору, заранее спасибо!
З.Ы.:
Кстати, пробывал эксперементировать, анимация корява конечно, но всё же.
Всё тоже самое, но теперь можно прыгать через ящик и бить его.
Link 696 kb (GameMaker 8)

Только не ругайте ... redface



Fast, like fire!

Сообщение отредактировал Bercut - Пятница, 05.02.2010, 17:06
 
Ang3L Дата: Пятница, 05.02.2010, 17:23 | Сообщение # 137
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (Bercut)
А что делать, если я хочу резко остановиться или ударить, ведь при этом способе у нас произойдёт рассинхронизация =-(

Наконец-то дошло! happy В этом и заключается вся сложность. Я уже описал выше решение этой проблемы, видимо ты пропустил. Решается это 3 способами:

1) Сложный в плане анимации. Прерывание это просто переход не между последними кадрами, а между какими-то другими. Соответственно, рисуем переходы из любого кадра в любой (или как можно большее кол-во анимации и переходов). Сложность заключается в том что анимация растёт в экспоненте, а то и факториале.

2) Простой. Просто прервать анимацию и начать другую не дожидаясь конца. Так сделано в большинстве 2д и 3д игр, в том числе и приведёнными тобою, только там это делается настолько быстро что ты не успеваешь замечать и в этом весь фокус. Иногда, когда прерывают, накладывают какой-нибудь спец. эффект, чтобы невидно было прерывания.

3) Сложный в плане программирования, т.н. процедурная анимация. Входит в моду в последнее время, например, проект Euphoria (не наркотик happy ). Актуальная для 3д (для 2д я только только задумался). Смысл в том что у нас есть объекты (кости) которые передвигаются по запланированными нами действиями. Они имеют свойство процедурно "перетекать" друг в друга, за счёт этого анимация получается плавно, т.к. строится на лету. А потом просто отрисовываем "мясо" по положению этих костей. В этом случае не надо рисовать самому как в случае 1) всё сделает компьютер. Но! Это годится для 3д, для 2д только для векторной графики, иначе будет очень заметно что персонаж состоит из кусочков, а не одно целое.

А вот плавная, уникальная, самостроящаяся анимация в 2д... Вот это высший пилотаж. Я вот ща обдумываю как это можно замутить...

т.е. что я хочу сказать. В Prince of Persia практически не предполагались вот такие прерывания (точнее частых переходов из состояния в состояние), поэтому стиль игры как в Assasin's Creed, в 2д не получить. Поэтому для тебя вариант 2) самый-самый. А если какой-нибудь спец. эффект наложишь никто и не заметит. Используй приём фокусников: отвлеки внимание игрока, а в это время сделай всё что тебе нужно.

P.S.: В плане изучения. Запиши видео на игру (например, во Fraps'е), а затем проигрывай покадрово. Увидишь все нюансы и ... разочаруешься в играх. wink
P.P.S.: Если ты проходил PoP, то наверняка бодался с сильными противниками, которые блокируют твои удары. Оцени анимацию этих блоков и вообще боя. Меня завораживает до сих пор. Кстати, в 3д я ничего подобного никогда не видел.



Blogpost
 
DreamRunner Дата: Пятница, 05.02.2010, 17:32 | Сообщение # 138
Админ
Группа: Админы
Сообщений: 1382
Статус: Offline
Глянул, а ты что, для файтинга делаешь переходы между движениями? Имхо, не стоит того. Здесь нужно более быстрое взаимодействие - нажал ударить - так и должен ударить а не бежать до клетки.
Переходы актуальны для ходилок-бродилок-квестов. Кстати здесь кадров маловато.

Лучше, если перс будет занимать ровное количество клеток в высоту (да и в ширину при возможности), во время анимации бега (он немного подпрыгивает на ней).

 
Bercut Дата: Пятница, 05.02.2010, 18:11 | Сообщение # 139
Болтун
Группа: Проверенные
Сообщений: 197
Статус: Offline
Quote (Ang3L)
1) Сложный в плане анимации. Прерывание это просто переход не между последними кадрами, а между какими-то другими. Соответственно, рисуем переходы из любого кадра в любой (или как можно большее кол-во анимации и переходов). Сложность заключается в том что анимация растёт в экспоненте, а то и факториале.

Не поверишь, думал об этом =-)
Чёрд, я твои мысли читаю чтоли, или мы живём на одной платене? happy
Вот, правда думал об этом на забыл сказать, сам понимаю колличество анимаций =-)
Quote (Ang3L)
2) Простой. Просто прервать анимацию и начать другую не дожидаясь конца. Так сделано в большинстве 2д и 3д игр, в том числе и приведёнными тобою, только там это делается настолько быстро что ты не успеваешь замечать и в этом весь фокус. Иногда, когда прерывают, накладывают какой-нибудь спец. эффект, чтобы невидно было прерывания.

Да, вполне, но как в этом случае рассчитывать столкновения?
Мы же прирываем ход событий и перс оказывается непонятно где.
Quote (Ang3L)
P.S.: В плане изучения. Запиши видео на игру (например, во Fraps'е), а затем проигрывай покадрово. Увидишь все нюансы и ... разочаруешься в играх.

Вот хочу разобрать, не посоветуешь игры и эмуляторы, которые эмулируют точное разрешение игры, то есть чтобы картинка получалась 1 в 1?
Мысли мои читаешь =-) Как раз над этим думал, вот мучался, картинка получается в два раза больше. И чем лучше записать видео?
Quote (Ang3L)
P.P.S.: Если ты проходил PoP, то наверняка бодался с сильными противниками, которые блокируют твои удары. Оцени анимацию этих блоков и вообще боя. Меня завораживает до сих пор. Кстати, в 3д я ничего подобного никогда не видел.

Всё это было очень давно, да и полностью не проходил, но игра очень интересная, сложная и загодочная.
Ты кстати играл в ту что на денди?
Quote (DreamRunner)
Глянул, а ты что, для файтинга делаешь переходы между движениями? Имхо, не стоит того. Здесь нужно более быстрое взаимодействие - нажал ударить - так и должен ударить а не бежать до клетки. Переходы актуальны для ходилок-бродилок-квестов. Кстати здесь кадров маловато. Лучше, если перс будет занимать ровное количество клеток в высоту (да и в ширину при возможности), во время анимации бега (он немного подпрыгивает на ней).

Это всего лишь тест.
Будущая игра нефайтинг, а платформер.
На счёт нажал ударить - ударил, в этом собственно и проблема.
На счёт клеток спасибо.
А как мне увеличить количество кадров, если их нарисованно огранниченное количество, или я не допонимаю? =-(
Ну подпрыгивает, значит я напортачил. =-(((


Fast, like fire!
 
Ang3L Дата: Пятница, 05.02.2010, 19:29 | Сообщение # 140
Каждый 5й пост мой
Группа: Админы
Сообщений: 2667
Статус: Offline
Quote (Bercut)
Вот хочу разобрать, не посоветуешь игры и эмуляторы, которые эмулируют точное разрешение игры, то есть чтобы картинка получалась 1 в 1?

DosBox + DosShell.

Чтобы 1 в 1 (в dosbox.conf):

Quote
fullscreen=false
fulldouble=false
fullresolution=original
windowresolution=original

...

aspect=false
scaler=none
#scaler=super2xs ai <- для качественной картинки в большем разрешений. Очень хорошее сглаживание.

Quote (Bercut)
И чем лучше записать видео?

Я пользовался Fraps'ом.

Quote (Bercut)
Ты кстати играл в ту что на денди?

На денди нет. У меня никогда не было денди и всегда завидовал тем у кого были приставки, вместо него всегда был прокачанный PC. cool

Quote (Bercut)
Мы же прирываем ход событий и перс оказывается непонятно где.

Что за чушь? Перс всегда находится на одном месте. Это анимация находится в разных местах. Анимация заканчивается и после этого перс меняет позицию. Это очень важно понять! И это важное различие в платформерах, допустим Червяка Джима от Принца Персий. И когда мы прерываем анимацию пероснаж находился в том же положений что и был. А вот как синхронизировать анимацию? Вот это правильный вопрос. В Принц Персии это было сделано так: когда тебя ударяют анимация переходит в статичный кадр, который смещается до позиций персонажа и затем переходит в состояние до прерывания (тоже самое с падением).

Quote (Bercut)
Да, вполне, но как в этом случае рассчитывать столкновения?

По моему, как и всегда.
Code
если(нажал пробел)
{
      если(рядом враг и ты повёрнут в его сторону)
          switch(состояние врага)
          {
              стоит: -1 хелс врагу, проигрываем анимацию успешного удара;
              блокирует: проигрываем анимацию не успешного удара;
              издевается: проигрываем анимацию удара по щеке;  <img src="http://s3.ucoz.net/sm/6/wink.gif" border="0" align="absmiddle" alt="wink">   
              бьёт: проигрываем анимацию блока;
          }
      else  
          проигрываем анимацию удара;
}

-1 хелс можно не сразу отбавлять, а, например, в самой анимации после какого-нибудь кадра, называемой точкой не возврата, т.е. когда наш шаг удался. До этой точки удар будет проходить, но хелсы могут не отняться, если противник встал в блок.

Ещё фишка которая была в Принце: все "быстрые" действия состояли из малого кол-ва кадров. Анимация стойки в блок 1 кадр. Поэтому она успевала проигрываться до конца.

P.S.: Короче, я те так создание всей игры расскажу, да ещё пример в придачу. cool Сиди и разбирайся, и главное, думай головой. Я те много рыбок надавал, теперь учись сам ловить. wink Главное в таком стиле переходы и их надо уметь использовать, прерывать и т.д.



Blogpost
 
Форум Game Maker. Разработка игр. » Разработка игр на Game Maker (Simple Mode) » Проблема - решение. GML и прочее. » Вопросы от Bercut (все адекватно...)
Страница 7 из 11«12567891011»
Поиск:



Сообщество Gmaker.SU 2005-2012
Используются технологии uCoz
Простой вход