PDA

Просмотр полной версии : Пять раз нажать на кнопку, не больше


timedo
13.04.2013, 22:37
Здравствуйте. Решил создать мини игру на flash(actionscript3), как рас и поучить. В игре есть 3 цели, при нажатии на кнопку появляется кружок(выстрел) в рандомном месте, если попал в центр +100 очков и т.д. Как сделать что б можно было нажать на кнопку "выстрел" только 5-ть рас? Общий подсчет количество очков выводится на экран, только они налаживаются друг на друга и после нескольких выстрелов уже не видно результат, как сделать что б они не налаживались друг на друга? За код прошу сильно не ругать, только приступил к изучению

but - кнопка при нажатии на которую все происходит
ov - выстрел(точка которая перемещается и при попадание в цель +очки)
target1, target2, target3 - цель.



import flash.events.MouseEvent;
var GameScore:Number = 0;
var point:int;
var onClickButton:Number = 5;
but.addEventListener(MouseEvent.CLICK, onBUTClick);

function onBUTClick(e:MouseEvent):void{

ov.visible = true;
ov.x = Math.floor(Math.random()*550);
ov.y = Math.floor(Math.random()*300);

if(ov.hitTestObject(target3)) {
point += 100;
}
else if(ov.hitTestObject(target2)) {
point += 50;

}
else if(ov.hitTestObject(target)) {
point += 10;
}

import flash.text.TextField;
var t:TextField = new TextField();
GameScore += point;
t.text = String(GameScore);
addChild(t);
}

NoisyFlasher
14.04.2013, 00:42
Создайте переменную, например, buttonClicks: uint = 0. Она будет хранить количество нажатий на мышку. После каждого нажатия увеличивайте её на 1 и проверяйте, дошла ли она до нужного вам значения или еще нет. Если дошла - удаляйте слушатель щелчка мыши.

timedo
14.04.2013, 16:32
Создайте переменную, например, buttonClicks: uint = 0. Она будет хранить количество нажатий на мышку. После каждого нажатия увеличивайте её на 1 и проверяйте, дошла ли она до нужного вам значения или еще нет. Если дошла - удаляйте слушатель щелчка мыши.

вот так?


import flash.events.MouseEvent;
var GameScore:Number = 0;
but.addEventListener(MouseEvent.CLICK, onBUTClick);
var buttonClicks: uint = 0; // счетчик

import flash.text.TextField;
var t:TextField = new TextField();
addChildAt(t,0);

function onBUTClick(e:MouseEvent):void{

buttonClicks += 1; // при нажати кнопки +1
trace(buttonClicks); // просмотр, работает ли

ov.visible = true;
ov.x = Math.floor(Math.random()*550);
ov.y = Math.floor(Math.random()*300);

if(ov.hitTestObject(target3)) {
GameScore += 100;
}
else if(ov.hitTestObject(target2)) {
GameScore += 50;

}
else if(ov.hitTestObject(target)) {
GameScore += 10;
}

t.text = GameScore.toString();
}

chamele0n
14.04.2013, 16:57
а проверка где ?

if(buttonClicks == 5) {
////.............end
return;
}

NoisyFlasher
14.04.2013, 17:38
вот так?


import flash.events.MouseEvent;
var GameScore:Number = 0;
but.addEventListener(MouseEvent.CLICK, onBUTClick);
var buttonClicks: uint = 0; // счетчик

import flash.text.TextField;
var t:TextField = new TextField();
addChildAt(t,0);

function onBUTClick(e:MouseEvent):void{

buttonClicks += 1; // при нажати кнопки +1
trace(buttonClicks); // просмотр, работает ли

ov.visible = true;
ov.x = Math.floor(Math.random()*550);
ov.y = Math.floor(Math.random()*300);

if(ov.hitTestObject(target3)) {
GameScore += 100;
}
else if(ov.hitTestObject(target2)) {
GameScore += 50;

}
else if(ov.hitTestObject(target)) {
GameScore += 10;
}

t.text = GameScore.toString();
}






Почти.
trace() - это вывод информации отладчика. никакого воздействия на ход программы это не окажет.
Далее: увеличение счетчика нужно сделать в конце функции - когда будут выполнены все действия по нажатию на кнопку. В противном случае кнопка может отключиться раньше, чем это нужно.
В конце функции, после того как увеличите счетчик, добавьте:
if (buttonClicks == 5) {
but.removeEventListener(MouseEvent.CLICK, onBUTClick);
}
Это удалит слушатель события и кнопка больше не будет реагировать на нажатие.

chamele0n
14.04.2013, 17:43
Это удалит слушатель события и кнопка больше не будет реагировать на нажатие.

и будет висеть на сцене не к селу не к городу ? ))

timedo
14.04.2013, 19:07
Все работает, всем огромное спасибо!
А как теперь сделать так что б количество выстрелов(5) выводилось например в верхнем правом углу?


import flash.events.MouseEvent;
var GameScore:Number = 0;
but.addEventListener(MouseEvent.CLICK, onBUTClick);
var count:Number = 5; //количество выстрелов

import flash.text.TextField;
var t:TextField = new TextField();
addChild(t);

//для вывода выстрелов
import flash.text.TextField;
var t1:TextField = new TextField();
addChild(t1);

stop();

function onBUTClick(e:MouseEvent):void{
count -= 1; //каждый рас -1

if(count > 0) {
ov.x = Math.floor(Math.random()*550);
ov.y = Math.floor(Math.random()*300);
}
else if
(count == 0) {
but.removeEventListener(MouseEvent.CLICK, onBUTClick);
ov.visible = false;
}

trace(count);

colide();
setText(GameScore.toString());
setText1(count.toString());// вызов функции для выстрелов

}

function setText(txt:String)
{
t.text = txt;

}

//функция для вывода выстрелов на экран
function setText1(txt:String)
{
t1.text = txt;
}

function colide()
{
if(ov.hitTestObject(target3)) {
GameScore += 100;
}
else if(ov.hitTestObject(target2)) {
GameScore += 50;

}
else if(ov.hitTestObject(target)) {
GameScore += 10;
}
}


Добавлено через 24 минуты
Все, понял! Нужно было:

import flash.text.TextField;
var t1:TextField = new TextField();
addChild(t1).x = 480;
addChild(t1).y = 0;
stop();

NoisyFlasher
14.04.2013, 20:08
и будет висеть на сцене не к селу не к городу ? ))

С тем, как убрать кнопку со сцены, автор, я думаю, уже знаком. А вот слушатель в любом случае нужно отключать, после того, как кнопка перестанет быть нужна.