Понедельник, 29.04.2024, 20:37 | Приветствую Вас Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » Test category » Помощь » Смерть (Смерть)
Смерть
vadim4ik123Дата: Суббота, 13.04.2013, 19:25 | Сообщение # 1
Рядовой
Группа: Заблокированные
Сообщений: 23
Репутация: 0
Статус: Offline
Я хочу добавить смерть,у меня есть 2 танка,оба передвигаются и стреляют,но я хочу что бы они еще и взрывались.

P.S пули делал при помощи массив.
 
Danny25Дата: Воскресенье, 14.04.2013, 08:59 | Сообщение # 2
Майор
Группа: Пользователи
Сообщений: 12
Репутация: 0
Статус: Offline
Знаешь я тебе советую посмотреть код игры зона22 от стикера может там и поймёшь smile вот ссылка: http://vk.com/doc34229280_165924848?hash=e05d8eebe935bef540
 
vadim4ik123Дата: Воскресенье, 14.04.2013, 12:58 | Сообщение # 3
Рядовой
Группа: Заблокированные
Сообщений: 23
Репутация: 0
Статус: Offline
Там 10000 строчек!
 
VITTACHДата: Воскресенье, 14.04.2013, 17:36 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 27
Репутация: 10013
Статус: Offline
vadim4ik123,
Тебе необходимо завести 2 переменные, любые, которые изначально допустим равны единице, то есть - жизни, а когда они обнулятся - это будет значить смерть.
Для того, чтобы они изменились - необходима проверка на столкновение пули с танком. Она делается легко в цикле ну скажем на 10 пуль
for i=1,10 do
if masx[i]>=x and masx[i]<=x+tank:width() and masy[i]>=y and masy[i]<=y+tank:height() then
твоя переменная обнулится, ну скажем t1=0
end
end

Ну а дальше пишешь условие для смерти танка
if t1==0 then
твой код
end

Идею думаю ты понял, просто делаешь условие на столкновение и обнуляешь нужную тебе переменную. Удачи)
 
CraftManiakДата: Понедельник, 15.04.2013, 09:54 | Сообщение # 5
Рядовой
Группа: Пользователи
Сообщений: 6
Репутация: 7
Статус: Offline
Смерть делается по разному. Если тебе например нужно перезапустить уровень, тогда для этого тебе нужна лишь 1 переменная - жизни самого танка.
Например, сделаем так, что когда жизни танка меньше 0 или 0, тогда идет рестарт уровня. (похожий алгоритм использовался в Ogricks)

if hp <= 0 then
System.memclean()
dofile("script.lua")
end


Или например запустим функцию смерти:

function death()
System.message("You died(",0) --этим мы выведем сообщение о смерти см. урок 2
System.memclean()
hp=50 --восстановим HP (любое число)
dofile("script.lua")
end

...
while true do
...

if hp<= 0 then
death()
end


Вот так. Есть еще много способов, но все они схожи. Можешь собственный на базе других придумать)
 
vadim4ik123Дата: Понедельник, 15.04.2013, 20:01 | Сообщение # 6
Рядовой
Группа: Заблокированные
Сообщений: 23
Репутация: 0
Статус: Offline
Спасибо вам ребята!Само больше понял это VITTACH'a, спасибо тебе большое да и тебе CraftManiak.  angel

Добавлено (15.04.2013, 16:57)
---------------------------------------------
Все проверил, заработало спасибо!  smile

Добавлено (15.04.2013, 20:01)
---------------------------------------------
Блин,все прекрасно работало а теперь не работает((((((((((

for i=1,5 do --сделал на 5 пуль
if masx[i]>=x and masx[i]<=x+p1:width() and masy[i]>=y and masy[i]<=y+p1:height() then --массивы while true do вписал
t1=0 --переменную перед while true do вписал
end 
end 

Не понимаю почему не работает(

Сообщение отредактировал vadim4ik123 - Понедельник, 15.04.2013, 19:12
 
vadim4ik123Дата: Вторник, 16.04.2013, 15:23 | Сообщение # 7
Рядовой
Группа: Заблокированные
Сообщений: 23
Репутация: 0
Статус: Offline
Эм...Не понял.То-есть надо написать masx[i]<=x+1:width()?
 
VITTACHДата: Вторник, 16.04.2013, 18:41 | Сообщение # 8
Генералиссимус
Группа: Администраторы
Сообщений: 27
Репутация: 10013
Статус: Offline
vadim4ik123, По предложенному тобой участку кода не представляется возможным найти ошибку, ибо не расписано что у тебя за что отвечает, ну скажем p1, мы же не можем мысли читать..
Плюс - ты написал что у тебя что-то не работает, но ты не указал что именно, вообще что ли не запускается, или работает, но не корректно, а если не корректно, то в чем это выражается..

P.S. и впредь прошу придерживаться сего плана ответа, дабы получить надлежащую помощь smile
 
vadim4ik123Дата: Вторник, 16.04.2013, 20:43 | Сообщение # 9
Рядовой
Группа: Заблокированные
Сообщений: 23
Репутация: 0
Статус: Offline
VITTACH,
P1 это мой танк(картинка),у меня не выполняется это.

for i=1,5 do 
if masx[i]>=x and masx[i]<=x+p1:width() and masy[i]>=y and masy[i]<=y+p1:height() then
t1=0
end  
end

Не пойму в чем проблема,все работало раньше.
 
VITTACHДата: Вторник, 16.04.2013, 21:08 | Сообщение # 10
Генералиссимус
Группа: Администраторы
Сообщений: 27
Репутация: 10013
Статус: Offline
vadim4ik123, А ты уверен, что вносил изменения исключительно в этот участок кода, или
может все-таки куда-то ещё? Ибо эти 6 строчек по определению не могут
быть причиной ошибки, ошибка глубже - и её нужно ещё отыскать. Кст переменные X и Y надеюсь ни где более не используются кроме как координат танка?

Как вариант - либо вышли весь код этого скрипта, либо попробуй откатить файл - делается это 2мя способами

1)Только если сам файл хранился на ПК а не на карточке PSP.Открываешь свойства/и выбираешь пункт предыдущие версии, там можно воскресить почти все пред. версии этого файла
2)Не важно где он у тебя находился, но зато важно наличие старой копии, если у тебя такая есть, ну скажем вчерашней или позавчерашней. Тогда открываешь эти 2 файла в программе WinMerge и она выдает тебе различия между ними,по которым ты можешь уже судить, какие изменения в коде привели к текущей ошибке
 
vadim4ik123Дата: Вторник, 16.04.2013, 21:39 | Сообщение # 11
Рядовой
Группа: Заблокированные
Сообщений: 23
Репутация: 0
Статус: Offline
VITTACH, Еще и для пули,предыдущих версий нет.
 
VITTACHДата: Вторник, 16.04.2013, 22:52 | Сообщение # 12
Генералиссимус
Группа: Администраторы
Сообщений: 27
Репутация: 10013
Статус: Offline
vadim4ik123, Забавно получается, у тебя массив на 5 пуль, а условие if fire<10 then пишешь..
Но проблема даже не в этом

Ты пишешь
if pad:l() and oldpad:l()~=pad:l() then 
masx[fire]=x+50
...

а потом где-то проверяешь на условие попадения

for i=1,5 do 
if masx[i]>=x and masx[i]<=x+p1:width() and masy[i]>=y and masy[i]<=y+p1:height() then 
t1=0
...

Понял к чему я клоню? у тебя masx [fire]уже равен x+50 а потом ты его же masx [i]проверяешь - ЗАЧЕМ-ТО на условие >=x и там <=x+p1:width()

Вероятно ты просто перепутал местами там где надо писать x а где xx

Надеюсь это именно оно было
 
vadim4ik123Дата: Среда, 17.04.2013, 18:52 | Сообщение # 13
Рядовой
Группа: Заблокированные
Сообщений: 23
Репутация: 0
Статус: Offline
Я не понял в чем моя ошибка.Скажи просто как её исправить а то я нечего не понял. wacko
 
VITTACHДата: Среда, 17.04.2013, 19:01 | Сообщение # 14
Генералиссимус
Группа: Администраторы
Сообщений: 27
Репутация: 10013
Статус: Offline
vadim4ik123,
Фраза скажи просто как её исправить - меня убила - может мне и код за тебя написать?
Думай - мы программисты так не поступаем, это не в наших принципах просто тыкать человеку носом туда, где у него ошибка. Так ты НИКОГДА ничему не научишься.

Я же тебе говорю, что у тебя в проекте нарушена логика
1) Не понятно почему ты пишешь условие if fire<10 then, учитывая тот факт, что пуль у тебя только 5, если ты меня не понял, то задай себе вопрос, а для чего вообще ты писал это условие, и если не ответишь, посомтри урок по массивам
2)Ты где-то пишешь masx[fire]=x+50 а потом проверяешь на условие >=x и там <=x+p1:width() - ты понимаешь, что это глупо - проверять и без того истинное выражение. Я клонил к тому, что ты должен был проверять не на X а на XX скорее всего

Программирование - это труд.. большой труд, который не терпит халатного отношения
 
vadim4ik123Дата: Среда, 17.04.2013, 22:28 | Сообщение # 15
Рядовой
Группа: Заблокированные
Сообщений: 23
Репутация: 0
Статус: Offline
Извини пожалуйста за слова,я понял,все работает,думаю что не кто не тупил как я. smile
 
Форум » Test category » Помощь » Смерть (Смерть)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Навигация
Форма входа