Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Пять раз нажать на кнопку, не больше (http://www.flasher.ru/forum/showthread.php?t=197854)

timedo 13.04.2013 22:37

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

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

Код AS3:

 
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

Создайте переменную, например,
Код AS3:

buttonClicks: uint = 0

. Она будет хранить количество нажатий на мышку. После каждого нажатия увеличивайте её на 1 и проверяйте, дошла ли она до нужного вам значения или еще нет. Если дошла - удаляйте слушатель щелчка мыши.

timedo 14.04.2013 16:32

Цитата:

Сообщение от NoisyFlasher (Сообщение 1129738)
Создайте переменную, например,
Код AS3:

buttonClicks: uint = 0

. Она будет хранить количество нажатий на мышку. После каждого нажатия увеличивайте её на 1 и проверяйте, дошла ли она до нужного вам значения или еще нет. Если дошла - удаляйте слушатель щелчка мыши.

вот так?
Код AS3:

 
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

а проверка где ?
Код AS3:

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


NoisyFlasher 14.04.2013 17:38

Цитата:

Сообщение от timedo (Сообщение 1129809)
вот так?
Код AS3:

 
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() - это вывод информации отладчика. никакого воздействия на ход программы это не окажет.
Далее: увеличение счетчика нужно сделать в конце функции - когда будут выполнены все действия по нажатию на кнопку. В противном случае кнопка может отключиться раньше, чем это нужно.
В конце функции, после того как увеличите счетчик, добавьте:
Код AS3:

if (buttonClicks == 5) {
  but.removeEventListener(MouseEvent.CLICK, onBUTClick);
}

Это удалит слушатель события и кнопка больше не будет реагировать на нажатие.

chamele0n 14.04.2013 17:43

Цитата:

Сообщение от NoisyFlasher (Сообщение 1129823)
Это удалит слушатель события и кнопка больше не будет реагировать на нажатие.

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

timedo 14.04.2013 19:07

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

 
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 минуты
Все, понял! Нужно было:
Код AS3:

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


NoisyFlasher 14.04.2013 20:08

Цитата:

Сообщение от chamele0n (Сообщение 1129824)
и будет висеть на сцене не к селу не к городу ? ))

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


Часовой пояс GMT +4, время: 01:41.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.