Avatar billede kbirk Nybegynder
08. februar 2008 - 07:33 Der er 4 kommentarer og
1 løsning

AC3: Onclick event afhænger af rækkefølgen

Hejsa
Jeg er ved at lave et simpelt spil hvor man skal skyde på en skive og få point. Jeg har lavet skydeskiven og et sigte som følger musen.
Men jeg har det problem at hvis jeg sætter min nye cursor til at ligger over skiven trigger skiven ikke onclick event. Men hvis den ligger under fungerer det fint. Jeg ved godt at det skyldes at man faktisk trigger onclick på krydset, da det følger musen. Men er der nogen nem måde at omgå dette?

Se koden nederst..


Cursor nederst: http://kasperbirk.dk/wp-content/flash/game1.swf
Cursor øverst: http://kasperbirk.dk/wp-content/flash/game2.swf

// + + + IMPORTS + + + //
import flash.events.MouseEvent;

Mouse.hide();

// + + +  + + + //
var myMovie:MySymbol = new MySymbol();
// + + + TARGET + + + //
var target0:Target0 = new Target0();
var target1:Target1 = new Target1();
var target2:Target2 = new Target2();
var target3:Target3 = new Target3();
var target4:Target4 = new Target4();

// + + + ADD GRAPHIC + + + //

addChild(myMovie); // <-- CURSOR

addChild(target0);
addChild(target1);
addChild(target2);
addChild(target3);
addChild(target4);

target0.x = 200;
target0.y = 200;
target1.x = 200;
target1.y = 200;
target2.x = 200;
target2.y = 200;
target3.x = 200;
target3.y = 200;
target4.x = 200;
target4.y = 200;

// + + + EVENTS + + + //
stage.addEventListener(MouseEvent.MOUSE_MOVE, setPosition);
target0.addEventListener(MouseEvent.MOUSE_DOWN, shoot);
target1.addEventListener(MouseEvent.MOUSE_DOWN, shoot);
target2.addEventListener(MouseEvent.MOUSE_DOWN, shoot);
target3.addEventListener(MouseEvent.MOUSE_DOWN, shoot);
target4.addEventListener(MouseEvent.MOUSE_DOWN, shoot);


function setPosition(E:Event):void {
    // Opdater myMovie's position
    Mouse.hide();
    myMovie.x = mouseX;
    myMovie.y = mouseY;
}

function shoot(E:Event):void {
    switch (getQualifiedClassName(E.currentTarget).toString())
    {
        case "Target0" :
            pointLabel.text = '100';
            break;
        case "Target1" :
            pointLabel.text = '200';
            break;
        case "Target2" :
            pointLabel.text = '300';
            break;
        case "Target3" :
            pointLabel.text = '400';
            break;
        case "Target4" :
            pointLabel.text = '500';
            break;
    }
}
Avatar billede maqhem Nybegynder
08. februar 2008 - 19:43 #1
Du kan jo lave et hitTestPoint-tjek mellem skydeskive og cursor. Noget i denne hér stil:

DinCursor.addEventListener(MouseEvent.CLICK, Skyd);
function Skyd(E:MouseEvent):void {
    if(E.target.hitTestPoint(mouseX, mouseY, true) {
        trace("Der blev affyret et skud, som ramte målskiven");
    } else {
        trace("Der blev affyret et skud, som desværre missede");
    }
}
Avatar billede maqhem Nybegynder
08. februar 2008 - 19:44 #2
Det skal selvfølgelig ikke være E.target, men Skydeskive.
Avatar billede maqhem Nybegynder
08. februar 2008 - 19:50 #3
Og så mangler der lige en parantes. Lidt sådan hér måske:

Mouse.hide();

var Obj:Skydeskive = new Skydeskive();
var Cursor:Sigtekorn = new Sigtekorn();

addChild(Obj);
addChild(Cursor);

Obj.x = 300;
Obj.y = 200;

stage.addEventListener(MouseEvent.MOUSE_MOVE, SetPosition);
Cursor.addEventListener(MouseEvent.CLICK, Skyd);


function SetPosition(E:MouseEvent):void {
    Cursor.x = mouseX;
    Cursor.y = mouseY;
}

function Skyd(E:MouseEvent):void {
    if(Obj.hitTestPoint(mouseX, mouseY, true)) {
        trace("Der blev affyret et skud, som ramte målskiven");
    } else {
        trace("Der blev affyret et skud, som desværre missede");
    }
}
Avatar billede kbirk Nybegynder
09. februar 2008 - 00:09 #4
Hejsa..
Tak for hjælpen. Det kom til at virke med hitTestPoint. Hvis du lige svarer så giver jeg nogle point..
Avatar billede maqhem Nybegynder
09. februar 2008 - 13:47 #5
Det var så lidt.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester