Game Maker - создание игр | HellRoom Games
Май 14, 2025, 12:08:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Спрайты для врагов TDS  (Прочитано 5026 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Lifchik23
Посетитель
**

Репутация: 0
Offline Offline

API: GameMaker 8.1 Standard
Сообщений: 28


« : Апрель 15, 2016, 11:16:47 »

Здравствуйте. В прошлой теме http://forum.hellroom.ru/index.php?topic=23077.15 мне помогли сделать движение для врага в TDS игре , который преследует героя.Передвигается только по 4м направлениям (влево,вправо,верх,низ). Парился 5 дней как написать в коде спрайты для движения. Остановился на
if (obj_mob.x = obj_mob.xprevious ) and (obj_mob.y = -y) {sprite_index = spr_mob_Niz}
if (obj_mob.x = obj_mob.xprevious ) and (obj_mob.y = +y) {sprite_index = spr_mob_Verx}
if (obj_mob.y = obj_mob.yprevious ) and (obj_mob.x = -x) {sprite_index = spr_mob_Left}
if (obj_mob.y = obj_mob.yprevious ) and (obj_mob.x = +x) {sprite_index = spr_mob_Right}

Работает да , но криво - враг иногда использует спрайт допустим spr_mob_Left для движения вниз.
Не можете мне помочь разобраться.
Записан
Christopher
mgflernGD
GM Pro user
*

Репутация: 99
Offline Offline

Пол: Мужской
Награды:
3 место в HellRoom Jam XВторое место на HellRoom Jam #9 [Антибиотик]500 сообщений!За постоянность! [10 дней на форуме]
API: Game Maker 7.0 Pro
Деятельность: Инди-разработчик
Сообщений: 713


DragonGameStudios


WWW
« Ответ #1 : Апрель 15, 2016, 11:20:57 »

дак а что надо? менять спрайты в зависимости от направления?
Код:
if direction=0 {sprite_index=spr_Right}
if direction=90(sprite_index=spr_Up)
if direction=180{sprite_index=spr_Left}
if direction=270{sprite_index=spr_Down}
//названия спрайтом поменяй на свои
Записан
Lifchik23
Посетитель
**

Репутация: 0
Offline Offline

API: GameMaker 8.1 Standard
Сообщений: 28


« Ответ #2 : Апрель 15, 2016, 12:35:30 »

дак а что надо? менять спрайты в зависимости от направления?
Код:
if direction=0 {sprite_index=spr_Right}
if direction=90(sprite_index=spr_Up)
if direction=180{sprite_index=spr_Left}
if direction=270{sprite_index=spr_Down}
//названия спрайтом поменяй на свои

Менять спрайт в зависимости от движения моба. Это не подходит. Он иногда не меняет спрайт вообще  (тобиш шел за героем вниз , а герой повернул налево - враг дошел до точки поворота налево и идет туда со спрайтом вниз ) , либо же почему то ставит другой спрайт (например движение вниз имеет спрайт движения влево).
Записан
DmitryDS
Потому что я такой-сякой
GM Pro user
*

Репутация: 159
Offline Offline

Награды:
За лояльность! [+150 репутации]1000 сообщений!За постоянность! [100 дней на форуме]
API: GameMaker Studio Master
Сообщений: 1061



WWW
« Ответ #3 : Апрель 15, 2016, 13:33:16 »

Ставьте в Step и все заработает, если руки не крюки (а они не крюки, я надеюсь)
Записан

Я никогда никого не пытаюсь оскорбить или обидеть, хотя порой веду себя вызывающе. Не обижайтесь, я не со зла
Christopher
mgflernGD
GM Pro user
*

Репутация: 99
Offline Offline

Пол: Мужской
Награды:
3 место в HellRoom Jam XВторое место на HellRoom Jam #9 [Антибиотик]500 сообщений!За постоянность! [10 дней на форуме]
API: Game Maker 7.0 Pro
Деятельность: Инди-разработчик
Сообщений: 713


DragonGameStudios


WWW
« Ответ #4 : Апрель 15, 2016, 17:45:48 »

if direction>0+45 or direction<360-45{sprite_index=spr_Right}
if direction>90+45 or direction<90-45(sprite_index=spr_Up)
if direction>180+45 or direction<180-45{sprite_index=spr_Left}
if direction>270+45 or direction<270-45{sprite_index=spr_Down}
//названия спрайтом поменяй на свои
Записан
Fantom
I am... All of me
Гл. Администратор
*

Репутация: 1325
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #5 : Апрель 15, 2016, 17:54:46 »

if direction>0+45 or direction<360-45{sprite_index=spr_Right}
if direction>90+45 or direction<90-45(sprite_index=spr_Up)
if direction>180+45 or direction<180-45{sprite_index=spr_Left}
if direction>270+45 or direction<270-45{sprite_index=spr_Down}
//названия спрайтом поменяй на свои
Так много or, при которых создаётся ощущение, что будут выбираться все перечисленные спрайты одновременно при любом значении направления, а в итоге останется spr_Down.
Больше 45 или меньше 315; больше 135 или меньше 45 = вверх, получается обратный эффект, правильный угол "вырезан" из условий.
Записан

geroy231
GM Pro user
*

Репутация: 137
Offline Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [100 дней на форуме]
API: Game Maker 8.0 Pro
Сообщений: 952



« Ответ #6 : Апрель 15, 2016, 18:11:16 »

Записан

life Jumb
GM Pro user
*

Репутация: 251
Offline Offline

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #7 : Апрель 15, 2016, 18:12:06 »

Код: (create)
tmp_type=0

Код: (step)
var sp;
sp=4 //скорость

if(tmp_type=0)
{
   tmp_type=abs(x-player.x)-abs(y-player.y)
   tmp_type=sign(tmp_type)
   if(tmp_type=0){tmp_type=1}
}

if(tmp_type=1)
{
  x+=min(sp,abs(player.x-x))*sign(player.x-x)
  if(x=player.x){tmp_type=0}
}

if(tmp_type=-1)
{
  y+=min(sp,abs(player.y-y))*sign(player.y-y)
  if(y=player.y){tmp_type=0}
}


В том коде из прошлой темы дирекшоны не используються.

Код: (кусок того кода)
if(tmp_type=1)
{
  if(sign(player.x-x)=-1){sprite_index=spr_Left}else{sprite_index=spr_Right}// эта строчка
  x+=min(sp,abs(player.x-x))*sign(player.x-x)
  if(x=player.x){tmp_type=0}
}

if(tmp_type=-1)
{
  if(sign(player.y-y)=-1){sprite_index=spr_Up}else{sprite_index=spr_Down} // и эта
  y+=min(sp,abs(player.y-y))*sign(player.y-y)
  if(y=player.y){tmp_type=0}
}

Добавлено: Апрель 15, 2016, 18:14:48
в гмс не прокатит, но есть хардовые способы узнать индекс спрайта по имени
Записан

 
Fantom
I am... All of me
Гл. Администратор
*

Репутация: 1325
Offline Offline

Пол: Мужской
Награды:
5000 сообщений!За постоянность! [500 дней на форуме]За лояльность! [+1000 репутации]За отличные статьи по Game Maker!Тру Админ :DЗнаток Game Maker...
API: GameMaker Studio Master
Сообщений: 5026



« Ответ #8 : Апрель 15, 2016, 18:33:01 »



Записан

life Jumb
GM Pro user
*

Репутация: 251
Offline Offline

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #9 : Апрель 15, 2016, 18:49:05 »

Fantom, не знал об этой функции... меня уделали 
Записан

 
Lifchik23
Посетитель
**

Репутация: 0
Offline Offline

API: GameMaker 8.1 Standard
Сообщений: 28


« Ответ #10 : Апрель 15, 2016, 21:21:56 »

Код: (create)
tmp_type=0

Код: (step)
var sp;
sp=4 //скорость

if(tmp_type=0)
{
   tmp_type=abs(x-player.x)-abs(y-player.y)
   tmp_type=sign(tmp_type)
   if(tmp_type=0){tmp_type=1}
}

if(tmp_type=1)
{
  x+=min(sp,abs(player.x-x))*sign(player.x-x)
  if(x=player.x){tmp_type=0}
}

if(tmp_type=-1)
{
  y+=min(sp,abs(player.y-y))*sign(player.y-y)
  if(y=player.y){tmp_type=0}
}


В том коде из прошлой темы дирекшоны не используються.

Код: (кусок того кода)
if(tmp_type=1)
{
  if(sign(player.x-x)=-1){sprite_index=spr_Left}else{sprite_index=spr_Right}// эта строчка
  x+=min(sp,abs(player.x-x))*sign(player.x-x)
  if(x=player.x){tmp_type=0}
}

if(tmp_type=-1)
{
  if(sign(player.y-y)=-1){sprite_index=spr_Up}else{sprite_index=spr_Down} // и эта
  y+=min(sp,abs(player.y-y))*sign(player.y-y)
  if(y=player.y){tmp_type=0}
}

Добавлено: Апрель 15, 2016, 18:14:48
в гмс не прокатит, но есть хардовые способы узнать индекс спрайта по имени

Вы мой герой!! Благодарю Вас!! И опять таки оказалось все просто , а я лез в задницу.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 1.236 секунд. Запросов: 31.