Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.04.2013, 22:37
timedo вне форума Посмотреть профиль Отправить личное сообщение для timedo Найти все сообщения от timedo
  № 1  
Ответить с цитированием
timedo

Регистрация: Apr 2013
Сообщений: 32
Arrow Пять раз нажать на кнопку, не больше

Здравствуйте. Решил создать мини игру на 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);
}

Старый 14.04.2013, 00:42
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 2  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Создайте переменную, например,
Код AS3:
buttonClicks: uint = 0
. Она будет хранить количество нажатий на мышку. После каждого нажатия увеличивайте её на 1 и проверяйте, дошла ли она до нужного вам значения или еще нет. Если дошла - удаляйте слушатель щелчка мыши.

Старый 14.04.2013, 16:32
timedo вне форума Посмотреть профиль Отправить личное сообщение для timedo Найти все сообщения от timedo
  № 3  
Ответить с цитированием
timedo

Регистрация: Apr 2013
Сообщений: 32
Цитата:
Сообщение от NoisyFlasher Посмотреть сообщение
Создайте переменную, например,
Код 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();
}

Старый 14.04.2013, 16:57
chamele0n вне форума Посмотреть профиль Отправить личное сообщение для chamele0n Посетить домашнюю страницу chamele0n Найти все сообщения от chamele0n
  № 4  
Ответить с цитированием
chamele0n
[+4 24.04.13]
[+4 20.04.13]

Регистрация: Feb 2013
Адрес: Seireitei
Сообщений: 176
а проверка где ?
Код AS3:
if(buttonClicks == 5) {
     ////.............end 
     return;
}
__________________
Personal Page
$demo = $away3d + $bullet + $pathfinding;

Старый 14.04.2013, 17:38
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 5  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Цитата:
Сообщение от timedo Посмотреть сообщение
вот так?
Код 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);
}
Это удалит слушатель события и кнопка больше не будет реагировать на нажатие.

Старый 14.04.2013, 17:43
chamele0n вне форума Посмотреть профиль Отправить личное сообщение для chamele0n Посетить домашнюю страницу chamele0n Найти все сообщения от chamele0n
  № 6  
Ответить с цитированием
chamele0n
[+4 24.04.13]
[+4 20.04.13]

Регистрация: Feb 2013
Адрес: Seireitei
Сообщений: 176
Цитата:
Сообщение от NoisyFlasher Посмотреть сообщение
Это удалит слушатель события и кнопка больше не будет реагировать на нажатие.
и будет висеть на сцене не к селу не к городу ? ))
__________________
Personal Page
$demo = $away3d + $bullet + $pathfinding;

Старый 14.04.2013, 19:07
timedo вне форума Посмотреть профиль Отправить личное сообщение для timedo Найти все сообщения от timedo
  № 7  
Ответить с цитированием
timedo

Регистрация: Apr 2013
Сообщений: 32
Все работает, всем огромное спасибо!
А как теперь сделать так что б количество выстрелов(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();

Старый 14.04.2013, 20:08
NoisyFlasher вне форума Посмотреть профиль Отправить личное сообщение для NoisyFlasher Найти все сообщения от NoisyFlasher
  № 8  
Ответить с цитированием
NoisyFlasher
 
Аватар для NoisyFlasher

Регистрация: Aug 2012
Сообщений: 70
Цитата:
Сообщение от chamele0n Посмотреть сообщение
и будет висеть на сцене не к селу не к городу ? ))
С тем, как убрать кнопку со сцены, автор, я думаю, уже знаком. А вот слушатель в любом случае нужно отключать, после того, как кнопка перестанет быть нужна.

Создать новую тему Ответ Часовой пояс GMT +4, время: 18:15.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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