[Flash/AS] variabele hittest

Pagina: 1
Acties:

  • TerraGuy
  • Registratie: Februari 2001
  • Laatst online: 17-06-2023

TerraGuy

The weirdo with the beard

Topicstarter
Het geval is als volgt. Ik heb een Flash-bestand met meerdere mc's boven op elkaar: de achtergrond, nog een achtergrond en daarbovenop staan allemaal rondjes, een stuk of 25. Die rondjes kun je inkleuren door erop te klikken.

Nu heb de code om alle rondjes in te kleuren:
code:
1
2
3
4
5
6
7
8
// het inkleuren van de rondjes
rondje_mc.onMouseUp = function():Void {
    // nieuwe colortransform aanmaken die gekoppeld wordt aan de movieclip
    var ctCircleColor:ColorTransform = new ColorTransform();
    kleurBepaling();
    ctCircleColor.rgb = nKleur;
    if(this.hitTest(this._root._xmouse, this._root._ymouse, true)){rondje_mc.transform.colorTransform = ctCircleColor;}
}


Deze vorm is al een stuk efficiënter dan mijn vorige versie, die zo'n 1500 regels code op zou leveren. :P Deze vorm zorgt voor zo'n 182 regels code als ik ze 25x koppel aan een rondje (rondje1_mc, rondje2_mc etc).

Maar het moet toch efficiënter kunnen, lijkt me. Nu bedacht ik dat ik een temporary_mc aan zou kunnen maken, waarin in ik plaats op welke rondje_mc er geklikt is via een functie. Ik heb al lopen bladeren in de Actionscript Bible, gezocht op Flashfocus en Google, maar ik ben nog niet tegengekomen hoe dat moet.

Hij moet dus teruggeven op welke mc er wordt geklikt, en niets als er tussen de rondjes in op de achtergrond_mc wordt geklikt (al kan ik dat ook afvangen en de functie laten stoppen als er op achtergrond_mc is geklikt, neem ik aan).

Iedereen kan gelijk hebben, allemaal tegelijk. Dat heb je met quantum.


  • TerraGuy
  • Registratie: Februari 2001
  • Laatst online: 17-06-2023

TerraGuy

The weirdo with the beard

Topicstarter
Ondertussen heb ik al een andere oplossing bedacht die het ook doet:

code:
1
2
3
4
5
6
7
8
9
10
11
12
// tijdelijke mc aanmaken
var allerondjes_mc:MovieClip;
for(var i:Number = 1; i <= 25; i++){    
    allerondjes_mc = tekeninghouder_mc["rondje" + i + "_mc"];
    allerondjes_mc.onMouseUp = function():Void {
        // nieuwe colortransform aanmaken die gekoppeld wordt aan de movieclip
        var ctCircleColor:ColorTransform = new ColorTransform();
        kleurBepaling();
        ctCircleColor.rgb = nKleur;
        if(this.hitTest(this._root._xmouse, this._root._ymouse, true)){this.transform.colorTransform = ctCircleColor; vakkenBijhouden();}
    }
}


Da's alweer een stuk minder dan 182 regels code. :)

Iedereen kan gelijk hebben, allemaal tegelijk. Dat heb je met quantum.


  • jeroen84
  • Registratie: Februari 2002
  • Laatst online: 13-09 12:42
Dat is inderdaad één mogelijke oplossing.

Ik weet niet wat je doel is met het Flash bestand, maar ik wil je er op duiden dat je actionscript niet erg efficient op het moment is.

Op het moment maak je X aantal movieclips aan, die ieder een onMouseUp event hebben en ieder een hitTest.

Als je meerdere dingen tegelijkertijd wil gaan doen kan dit een performance hit geven.

Wat je ook kan doen is je rondjes in een "circleHolder" movieclip stoppen. Dan neem je 1 movieclip met een onMouseMove event met daarin eerst een hitTest voor de circleHolder, en daarna pas een while of for loop die alle rondjes hitTest met de muis.