Форум 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=179831)

sanchoys14 22.05.2012 18:17

Не отслеживаются клики
 
Вложений: 1
Вот решил создать простенькую игру для практики на AS3.Вот её исходный код:
Код AS3:

var timer:Timer = new Timer(2000);
var o:int = Math.random() * 6 + 1;
var score:int = 0;
stage.addEventListener(Event.ENTER_FRAME, oz);
function oz(e:Event):void{
        o = Math.random() * 6 + 1;
}
timer.addEventListener(TimerEvent.TIMER, clock);
timer.start();
function clock(e:TimerEvent):void {
    this["lampa" + o].gotoAndPlay("red");
 
}
 
 
stage.addEventListener(MouseEvent.CLICK, clic)
function clic(e:MouseEvent):void{
        if (this["lampa" + o].currentLabel == "red" && this["lampa" + o].hitTestPoint(mouseX, mouseY, true)){
                this["lampa" + o].gotoAndPlay("green");
                score++;
                trace(score);
        }
 
}

А вот она сама:Вложение 27994
Так вот дело в том, что она почти не отслеживает клики. Из 10 кликов по шарикам может один и заметит.
В чём проблема? И вообще, как бы вы сделали это, потому что мой подход наверно совершенно не правельный)?

xdoom 22.05.2012 21:53

сделай так
Код AS3:

var lamp:Object = this["lampa" + o]
trace(lamp.currentLabel, lamp.hitTestPoint(mouseX, mouseY, true),mouseX, mouseY)

может сообразишь что не так.


а вообще да, подход странный )

sanchoys14 22.05.2012 22:36

Попробовал так. Мне это ни о чём не говорит) Нельзя ли как нибуть ещё подтолкнуть меня на правильный путь, или лучше вообше готовый код дать?

-De- 22.05.2012 22:37

Вы каждый кадр рандомно меняете индекс o. И при клике проверяете на попадание только один круг с этим рандомным индексом.
Я бы советовал подписать на клик все 6 ламп, и тогда в условии можно оставить только
Код AS3:

if (e.currentTarget.currentLabel == "red")


strangedk 22.05.2012 23:36

Цитата:

Сообщение от sanchoys14 (Сообщение 1080798)
или лучше вообше готовый код дать?

И че я сразу об этом не подумал)

sanchoys14 23.05.2012 14:27

Цитата:

Сообщение от -De- (Сообщение 1080800)
Вы каждый кадр рандомно меняете индекс o. И при клике проверяете на попадание только один круг с этим рандомным индексом.
Я бы советовал подписать на клик все 6 ламп, и тогда в условии можно оставить только
Код AS3:

if (e.currentTarget.currentLabel == "red")


Спасибо за совет, всё работает, но этот способ не совсем рациональный, я бы даже сказал вообще не рациональный. Может можна как-нибуть запихнуть все клипы(lampa1 - lampa6) в масив, а потом отслеживать клики по нему, или ешё какой-то вариант. Чтобы без личшего кода. Кстате вот код этой игры на AS2:
Код AS1/AS2:

onClipEvent (load) {
 timeBetweenFoxes = 2000;
 nextFox = getTimer() + timeBetweenFoxes;
 score = 0;
 numFoxes = 0;
 }
onClipEvent (enterFrame) {
 if (getTimerO >= nextFox) {
 timeBetweenFoxes -= 10;
 if (timeBetweenFoxes < 1000) {
 _root.gotoAndPlay("End") ;
 } else {
 numFoxes++; _root.showScore = score + "/" + numFoxes;
 while (true) {
 fox = Int (Math.Random0*18) ;
 if (_root["fox"+fox]._currentFrame == 1) break;
 _root ["fox"+fox].gotoAndPlay ("popup") ;
 nextFox = getTimerO + timeBetweenFoxes;
 }
}
}
onClipEvent (mouseDown) {
 х = _root. _xmouse;
 у = _root. _ymouse;
 for (i=0;i<18;i++) {
 if (_root["fox"+i]._currentFrame > 24) {
 if (_root["fox"+i].hitTest(x,у,false)) {
 _root["fox"+i].gotoAndPlay("whack");
 score++;
 _root.showScore = score + "/" + numFoxes;
}
}
}
}
}



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

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