Здоровье для противников?
| |
JJacket | Дата: Вторник, 14 Января 2014, 16:25 | Сообщение # 1 |
был не раз
Сейчас нет на сайте
| Всем привет! Не так давно, установил Game Maker:Studio и собственно говоря сразу же преступил к изучению. После завершения нескольких уроков в GMS, решил попробовать собрать свою мини игру типа (Scrolling Shooter) и столкнулся с небольшой проблемой. Никак не могу понять как поставить противникам hp, что-бы убивать их было сложнее, чем за один выстрел. И еще был бы признателен, если кто нибудь подсказал, как написать, для тех же самых противников, в которой указывалось бы, что при конкретном количестве hp, противник меняет спрайт. И еще маленький вопрос напоследок. Не по теме. сейчас на бесплатной версии программы не могу добавлять более 20-ти спрайтов. Решил приобрести стандартную версию игры и меня мучает вопрос, возможно ли будет, в той версии, помимо получения неограниченных ресурсов, добавлять более 20-ти спрайтов?)
|
|
| |
Raven84 | Дата: Вторник, 14 Января 2014, 16:37 | Сообщение # 2 |
старожил
Сейчас нет на сайте
| JJacket, Цитата Никак не могу понять как поставить противникам hp, что-бы убивать их было сложнее, чем за один выстрел. Вместо hp противников,можешь сделать проще.Просто указать кол-во попаданий необходимое для уничтожения врага.Для этого введи переменную в событии Create (событие создания врага): А в событии столкновения врага с пулей укажи: И тут же пулю сразу уничтожай обязательно. А в Step сделай проверку: Код if popal<=0 {instance_destroy()} Вот и все! То есть при этом коде во врага нужно будет попасть 4 раза.
Добавлено (14.01.2014, 16:35) --------------------------------------------- Цитата Решил приобрести стандартную версию игры и меня мучает вопрос, возможно ли будет, в той версии, помимо получения неограниченных ресурсов, добавлять более 20-ти спрайтов?) Да.Там нет ограничений.
Добавлено (14.01.2014, 16:37) --------------------------------------------- Цитата И еще был бы признателен, если кто нибудь подсказал, как написать, для тех же самых противников, в которой указывалось бы, что при конкретном количестве hp, противник меняет спрайт. В том же событии Step врага пишем: Код if popal<=2 {sprite_index=sprite2} Т.е. когда во врага осталось попасть 2 раза то меняем спрайт на sprite2 (ну тут естественно указываете имя своего спрайта)
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
Сообщение отредактировал Raven84 - Вторник, 14 Января 2014, 16:38 |
|
| |
LunarPixel | Дата: Вторник, 14 Января 2014, 16:39 | Сообщение # 3 |
старожил
Сейчас нет на сайте
| Цитата Raven84 ( ) в Step сделай Зачем каждый шаг это проверять?! Можно прописать в столкновении с пулей.
При столкновении пули с врагом делаешь проверку.
Код if hp>0 { hp-=1 with other instance_destroy() // удаляем пулю } else { with other instance_destroy() // удаляем пулю instance_destroy() // удаляем врага }
|
|
| |
Raven84 | Дата: Вторник, 14 Января 2014, 16:42 | Сообщение # 4 |
старожил
Сейчас нет на сайте
| LunarPixel, Да,так правильнее будет. Но в такой игре я думаю это сильно не повлияет на оптимизацию!
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
Сообщение отредактировал Raven84 - Вторник, 14 Января 2014, 16:43 |
|
| |
FadeBaker | Дата: Вторник, 14 Января 2014, 17:00 | Сообщение # 5 |
JavaSE Game Developer
Сейчас нет на сайте
| LunarPixel, индусский код, откровенно говоря. Можно было бы так: Код if ((hp -= 1) < 1) instance_destroy(); with (other) instance_destroy();
Уроки по GM Minecraft 2D на GM — Мои проекты — Blood Harvest [2D] — Original Blood Harvest [2D]: Remastered Edition Adventure Craft [2D] — Sandbox Space Shock [2D] — Scroll Shooter Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
|
|
| |
LunarPixel | Дата: Вторник, 14 Января 2014, 17:08 | Сообщение # 6 |
старожил
Сейчас нет на сайте
| Fade, я для большей доходчивости расписал, понятно, что можно и сократить. Только, думается мне, столь сокращенную запись гамак не воспримет и будет ругаться на условие.
|
|
| |
Raven84 | Дата: Вторник, 14 Января 2014, 17:22 | Сообщение # 7 |
старожил
Сейчас нет на сайте
| LunarPixel, Цитата Только, думается мне, столь сокращенную запись гамак не воспримет и будет ругаться на условие. Мне тоже показалось,что тут просто идет проверка условия обнуления hp и уничтожения.Но разве при таком коде hp будет отниматься? Тогда я еще многого в Гамаке не знаю! ))) В справке просто не видел возможности написания таким образом.
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
Сообщение отредактировал Raven84 - Вторник, 14 Января 2014, 17:25 |
|
| |
JJacket | Дата: Вторник, 14 Января 2014, 17:28 | Сообщение # 8 |
был не раз
Сейчас нет на сайте
| Большое вам спасибо Пойду дальше разбираться с игрой.
|
|
| |
LunarPixel | Дата: Вторник, 14 Января 2014, 17:48 | Сообщение # 9 |
старожил
Сейчас нет на сайте
| Цитата Raven84 ( ) Но разве при таком коде hp будет отниматься? Вообще, конечно работать будет. Но вот в случае с ГМ, если я не ошибаюсь, такое не прокатит. Вроде когда-то пробовал. Собственно, не сложно проверить, но сейчас ГМ под рукой нет.
|
|
| |
rgs_haker | Дата: Вторник, 14 Января 2014, 20:46 | Сообщение # 10 |
постоянный участник
Сейчас нет на сайте
| Цитата JJacket ( ) Никак не могу понять как поставить противникам hp, что-бы убивать их было сложнее, чем за один выстрел. если в создамнии у противника hp=100 а при столкновении с пулей не обезательно ставить конкретное число отниманий можно еще и hp-=0.05 и т.д так сложней убить врага, и еще можно зделать рандомно отнимание жизней чтоб каждый раз при попадании по разному отнимало
Цитата JJacket ( ) И еще был бы признателен, если кто нибудь подсказал, как написать, для тех же самых противников, в которой указывалось бы, что при конкретном количестве hp, противник меняет спрайт. принцип такой if hp=50 { instance_change(имя спрайта,true) }
Цитата JJacket ( ) возможно ли будет, в той версии, помимо получения неограниченных ресурсов, добавлять более 20-ти спрайтов?) да можно, ограничений в той версии нету
_____
|
|
| |
JJacket | Дата: Вторник, 14 Января 2014, 22:46 | Сообщение # 11 |
был не раз
Сейчас нет на сайте
| Цитата rgs_haker ( ) и т.д так сложней убить врага, и еще можно зделать рандомно отнимание жизней чтоб каждый раз при попадании по разному отнимало Большое спасибо.Добавлено (14.01.2014, 22:46) --------------------------------------------- В итоге вот такой код вписал врагам, на взаимодействие с пулей: if hp>0 { if hp<=7 {sprite_index=sprite17} hp-=3 with other instance_destroy() } else { with other instance_destroy() instance_destroy() instance_create((0),(0),obj_explosion) } Вот только "instance_create((0),(0),obj_explosion)" не срабатывает. Т.е. после уничтожения противника не создается на его месте obj взрыва. Подскажите пожалуйста, где я ошибаюсь?
|
|
| |
rgs_haker | Дата: Вторник, 14 Января 2014, 23:33 | Сообщение # 12 |
постоянный участник
Сейчас нет на сайте
| Цитата JJacket ( ) Вот только "instance_create((0),(0),obj_explosion)" не срабатывает. Т.е. после уничтожения противника не создается на его месте obj взрыва. Подскажите пожалуйста, где я ошибаюсь? тебе надо в событии удаление врага сменить спрайт instance_change(obj_explosion,true) на взрыв остается только настроить обьект obj_explosion
_____
|
|
| |
LunarPixel | Дата: Среда, 15 Января 2014, 00:06 | Сообщение # 13 |
старожил
Сейчас нет на сайте
| Цитата JJacket ( ) instance_destroy() instance_create((0),(0),obj_explosion)
замени на
Код instance_create(x,y,obj_explosion) instance_destroy()
|
|
| |
FadeBaker | Дата: Среда, 15 Января 2014, 00:32 | Сообщение # 14 |
JavaSE Game Developer
Сейчас нет на сайте
| Цитата LunarPixel ( ) Только, думается мне, столь сокращенную запись гамак не воспримет и будет ругаться на условие. Сам лично проверял недавно - все работает. Сначала выполняется действие, а потом проверяется результат. Такие конструкции позволены и это очень, кстати, удобно. Цитата rgs_haker ( ) принцип такой if hp=50 Никогда так не делай. После изменения здоровья оно может "перепрыгнуть" это значение и условие не выполнится. К примеру, было 60 ед., пуля отняла 15, осталось 45 - условие не выполнилось. Потом сиди думай, почему же не работает, ибо подобные ошибки часто незаметны.
Уроки по GM Minecraft 2D на GM — Мои проекты — Blood Harvest [2D] — Original Blood Harvest [2D]: Remastered Edition Adventure Craft [2D] — Sandbox Space Shock [2D] — Scroll Shooter Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
|
|
| |
LunarPixel | Дата: Среда, 15 Января 2014, 01:12 | Сообщение # 15 |
старожил
Сейчас нет на сайте
| Цитата Fade ( ) Сам лично проверял недавно - все работает. Хм, уж не знаю, как ты проверял, может я туплю от усталости, но выдает ошибку:
Код COMPILATION ERROR in code action Error in code at line 1: if ((hp -= 1) < 1) show_message('test'); ^ at position 9: Symbol ) expected.
|
|
| |
FadeBaker | Дата: Среда, 15 Января 2014, 03:21 | Сообщение # 16 |
JavaSE Game Developer
Сейчас нет на сайте
| LunarPixel, а попробуй на Studio проверить. На ней даже, кажись, инкремент/декремент работает.
Уроки по GM Minecraft 2D на GM — Мои проекты — Blood Harvest [2D] — Original Blood Harvest [2D]: Remastered Edition Adventure Craft [2D] — Sandbox Space Shock [2D] — Scroll Shooter Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
|
|
| |
LunarPixel | Дата: Среда, 15 Января 2014, 08:35 | Сообщение # 17 |
старожил
Сейчас нет на сайте
| Fade, проверил и на студии, сразу же после проверки на 8-ке, аналогично, сразу указывает на ошибку. Так что, как ты проверял? Я вот проверял когда-то и, судя по всему, такая же ошибка была.
|
|
| |
ErrantBug | Дата: Среда, 15 Января 2014, 10:25 | Сообщение # 18 |
постоянный участник
Сейчас нет на сайте
| Цитата LunarPixel ( ) Fade, проверил и на студии, сразу же после проверки на 8-ке, аналогично, сразу указывает на ошибку. Так что, как ты проверял? Я вот проверял когда-то и, судя по всему, такая же ошибка была. Я тоже проверил для достоверности: не работает (да и не работал никогда). GM думает, что это условие, а не приравнивание и конкретно тупит. Зато код можно записать и в другой краткой форме: (правда, там будет нулевая жизнь, но не суть )
Код with other {instance_destroy()}; if hp-1 < 0 {instance_destroy()} else {hp-=1};
Сообщение отредактировал ErrantBug - Среда, 15 Января 2014, 10:28 |
|
| |
Raven84 | Дата: Среда, 15 Января 2014, 10:35 | Сообщение # 19 |
старожил
Сейчас нет на сайте
| Ну как бы кто код здесь не сокращал,смысл то все равно не меняется! Я считаю нужно делать код таким,чтобы он был понятен тебе самому! Ведь между кодом к примеру LunarPixel'а и кодом ErrantBug'а нет никакой разницы,разве что в написании. Или я чего-то не понимаю?
Super Knight Story (в разработке) Idolzzz - игра доступна в Steam и Play Market Oliver's Adventures in the Fairyland
Сообщение отредактировал Raven84 - Среда, 15 Января 2014, 10:37 |
|
| |
LunarPixel | Дата: Среда, 15 Января 2014, 12:26 | Сообщение # 20 |
старожил
Сейчас нет на сайте
| Raven84, ну мой первоначальный код не оптимальный, как написал уже просто он нагляднее. Как минимум два раза уничтожать пулю смысла нет. Это не критично, но из таких мелочей могут и крупные проблемы вырасти, так что нужно стараться сделать максимально оптимально.
|
|
| |
|