Просмотр полной версии : Прибавление жизни в игре
Доброе время суток, друзья. У меня следущая проблема:
Я делаю игру. Герой собирает разные бонусы, получает за них очки. Бонусы есть двух стоимостей: 10 и 100 очков. При накоплении к примеру 1000 очков, он должен получить какой-то приз.
Очки прибавляются стандартным способом:
if (score==1000){
life=life+1;
Ситуация: у игрока, к примеру, 950 очков, он берет бонус стоимостью 100 очков и у него в итоге получается 1050. И life+1 он не получает.
Вопрос: как грамотно смастерить код?
DarkLight
25.02.2009, 19:37
перед и после прибавления очков сравнивать Math.floor(score/1000); Если после прибавления увеличилось - надбавляем жизнь.
А можете написать, где это вставить в мой код, я не очень понимаю..
DarkLight
25.02.2009, 19:46
это там где очки вставляются, в Вашем коде место прибавления очков отсутствует
Не понял про что говорит DarkLight (может я туплю), но вот решение (я так думаю):
if (score >= 1000) {
life += 1;
};
Зачем floor?
prevscore=score;
score+=100;
if(prevscore<1000&&score>=1000) life+=1;
ZIK68, в вашем варианте после набора 1000 очков любое увеличение счёта будет прибавлять попытку.
DarkLight
25.02.2009, 20:03
мм, я имел ввиду случай когда 1000,2000,3000 и т п - прибавляется по одной жизни.
Для каждой тысячи можно сделать по разному. Зависит от количества очков, которые могут добавиться за один раз. Если в AS есть операция % (должна быть), можно так:
prevscore=score%1000;
score+=100;
if(prevscore>(score%1000)) life+=1;
Но если за один раз может добавиться больше тысячи очков, придётся делать сложнее, чтобы добавлялось соответствующее количество попыток.
DarkLight
25.02.2009, 20:33
Не сказал бы что сложнее
prevscore=score;
score+=100;
life+=1*(Math.floor((score-prevscore)/1000));
даже if-а не нужно, если очки только вверх прибавляются
if ((getl(posx,posy)==".") and _root["chkdot"+posx+posy]<>".") {_root["Dot"+posx+posy].removeMovieClip(); _root.dot--
_root["chkdot"+posx+posy]=".";
_root.score+=10;
}
if ((getl(posx,posy)==",") and _root["chkdot"+posx+posy]<>",") {_root["Dot2"+posx+posy].removeMovieClip(); _root.dot--
_root["chkdot"+posx+posy]=",";
_root.score+=100;
Вот код, в котором при попадании героя в какую-то клеткуи с бонусом, ему дается N очков и бонус, который он взял, исчезает.
Не сказал бы что сложнее
prevscore=score%1000;
score+=100;
life+=1*((score-prevscore)%1000);
даже if-а не нужно, если очки только вверх прибавляются
И что получится с таким кодом?
Допустим, было 100 очков, прибавили 100. 1*((200-100)%1000) будет 100.
Мне надо именно для каждой тысяче прибавлять жизнь. Вот мой код:
if (score==5000 or score==10000 or score==15000){
life=life+1; score=score+10;
}
if (score==20000 or score==25000) {
life=life+2; score=score+10;
}
Прибавляю +10 каждый раз потому, что при наборе X000 очков жизни будут прибавляться со скоростью милисикунд до тех пор, пока не пополню счет. Если кто-то знает, как от этого избавиться, пишите )
Добавлено через 2 минуты
Зачем floor?
prevscore=score;
score+=100;
if(prevscore<1000&&score>=1000) life+=1;
ZIK68, в вашем варианте после набора 1000 очков любое увеличение счёта будет прибавлять попытку.
А куда вставить этот код??
DarkLight
25.02.2009, 20:58
И что получится с таким кодом?
Забыл убрать деление в 1ой строке, исправлено)
А что такое вообще %1000??
DarkLight
25.02.2009, 21:13
Целочисленный остаток от деления 1го числа на 2ое. Кстати он в этом случае не в тему, сделал вариант с Math.floor
А куда вставить этот код??
Туда, где вы прибавляете очки. Я рекомендую сделать функцию прибавления очков, в которой будет выполняться собственно прибавление и эта проверка.
Туда, где вы прибавляете очки. Я рекомендую сделать функцию прибавления очков, в которой будет выполняться собственно прибавление и эта проверка.
А как должна выглядеть эта функция, напишите пожалуйста, функции создаю оч. коряво, обычно скрипты просто беру откуда-то..
Добавлено через 5 минут
Не сказал бы что сложнее
prevscore=score;
score+=100;
life+=1*(Math.floor((score-prevscore)/1000));
даже if-а не нужно, если очки только вверх прибавляются
Вы можете всунуть правильно этот код в мой
if ((getl(posx,posy)==".") and _root["chkdot"+posx+posy]<>".") {_root["Dot"+posx+posy].removeMovieClip(); _root.dot--
_root["chkdot"+posx+posy]=".";
_root.score+=10;
}
if ((getl(posx,posy)==",") and _root["chkdot"+posx+posy]<>",") {
_root["chkdot"+posx+posy]=",";
_root.score+=100;
Добавлено через 10 минут
if ((getl(posx,posy)==",") and _root["chkdot"+posx+posy]<>",") {
_root.prevscore=_.root.score;
_root.score+=100;
life+=1*(Math.floor((_root.score-_root.prevscore)/1000));
}; Очки прибавляются, а жизни нет..
Ну так надо научиться создавать функции и вообще понимать элементарнейший код, типа примеров в этой теме, прежде чем писать игры.
Я AS2 не знаю, приблизительно функция будет выглядеть так:
function addPoints(amount:int):void
{
var prevscore:int=score%1000;
score+=amount;
if(prevscore>(score%1000)) life+=1;
}
И всюду в коде игры вместо score=score+число; нужно вызывать функцию addPoints(число);
За каждые 50 очков будет начисляться бонус в размере 1 очка.
setInterval не люблю, поэтому сделал через onEnterFrame счетчик.
Здесь же показано как используется функция
var timer=0
var score=0
var bonus_up=0
this.onEnterFrame=function()
{if(timer<10){timer++}else{
score+=10
timer=0
calc()
}}
function calc(){bonus_up=Math.floor(score/50)}
---------------------------------------------
Т.е если потратить жизни получаеш очки и они возвращаются :O
чего???
Т.е если потратить жизни получаеш очки и они возвращаются :O
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.