Ik zit met een vervelend probleem. Even schetsen. We zijn bezig met een project voor school. Dit project omvat het ontwikkelen van een spel. Dit spel een soort puzzel, door middel van stukjes te draaien, een route te vinden van begin naar eindpunt. Het project moet gescreven zijn in actionscript 2.0. Ja, ik weet het, we hadden ook liever 3.0 gehad. Maar wat is het probleem?
Als er op een blokje geklikt wordt, wordt via de Tween-klasse, ervoor gezorgd dat het blokje visueel gedraaid wordt. Dat kunnen we zien, en werkt ook perfect. Maar in het begin, als de blokjes random geplaatst worden moeten deze ook worden rondgedraaid. Dit wil ik doen met de property ._rotation. Maar als ik deze property gebruik op een MovieClip, dan verandert de scaling van het object. De hoogte van het object wordt verdubbeld. Ik ben al enkele dagen opzoek naar een oplossing, maar kan het maar niet vinden. Op Google vind ik geen zelfde problemen.
Hieronder een beetje relevante code. Ik hoop dat het genoeg is, want de klassen van de objecten zijn redelijk groot.
Deze code staat in de klasse Tile.as. Deze bevat alles die een puzzlestukje nodig heeft. Deze code maakt een movieclip van een clip die in de library staat.
In de klasse Tile.as bevindt zich een methode rotateTileTo. Deze zou moeten werken zonder een animatie.
Voor het moment staat deze code in de methode. Dit werkt zoals het hoort.
Maar ik zou willen dat de tile's niet ronddraaien met animatie als deze worden geplaatst. Maar daar komt het probleem zoals hierboven beschreven. Dit is de code.
getDisplayObject() geeft de MovieClip terug. Dus normaal moet deze gewoon gedraaid worden.
Het probleem wordt nog raarder ( of hoe schrijf je dat
) door het feit dat de scaling enkel wordt veranderd als er 90 of 270 graden worden gedraaid. Als je 0 of 180 graden draait heb je dit probleem niet.
Is er iemand die dit ook al heeft voorgehad, of ziet er iemand een denkfout? Wij vinden het namelijk niet, en Google biedt ook niet onmiddellijk een antwoord.
edit:
Ik heb nog een kleine test gedaan, en het wordt steeds vreemder. Als ik deze code in de eerste frame schrijf, zoals het dus geïmplementeerd is in de klasse, werkt het wel, en zonder problemen.
Als er op een blokje geklikt wordt, wordt via de Tween-klasse, ervoor gezorgd dat het blokje visueel gedraaid wordt. Dat kunnen we zien, en werkt ook perfect. Maar in het begin, als de blokjes random geplaatst worden moeten deze ook worden rondgedraaid. Dit wil ik doen met de property ._rotation. Maar als ik deze property gebruik op een MovieClip, dan verandert de scaling van het object. De hoogte van het object wordt verdubbeld. Ik ben al enkele dagen opzoek naar een oplossing, maar kan het maar niet vinden. Op Google vind ik geen zelfde problemen.
Hieronder een beetje relevante code. Ik hoop dat het genoeg is, want de klassen van de objecten zijn redelijk groot.
Deze code staat in de klasse Tile.as. Deze bevat alles die een puzzlestukje nodig heeft. Deze code maakt een movieclip van een clip die in de library staat.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| public function drawTile(typeTile:String) { var r:Number = _root.getNextHighestDepth(); _root.attachMovie(typeTile,"Tile"+r,r); this.displayId = "Tile"+r; displayObject = eval("Tile"+r); displayObject.onPress = Delegate.create(this, onClickEvent); displayObject._visible = false; } |
In de klasse Tile.as bevindt zich een methode rotateTileTo. Deze zou moeten werken zonder een animatie.
Voor het moment staat deze code in de methode. Dit werkt zoals het hoort.
code:
1
2
| var RotationT:Tween = new Tween(getDisplayObject(), "_rotation", Elastic.easeOut, actualRotation*90, r*90, 1, true); |
Maar ik zou willen dat de tile's niet ronddraaien met animatie als deze worden geplaatst. Maar daar komt het probleem zoals hierboven beschreven. Dit is de code.
code:
1
| getDisplayObject()._rotation = r*90; |
getDisplayObject() geeft de MovieClip terug. Dus normaal moet deze gewoon gedraaid worden.
Het probleem wordt nog raarder ( of hoe schrijf je dat
Is er iemand die dit ook al heeft voorgehad, of ziet er iemand een denkfout? Wij vinden het namelijk niet, en Google biedt ook niet onmiddellijk een antwoord.
edit:
Ik heb nog een kleine test gedaan, en het wordt steeds vreemder. Als ik deze code in de eerste frame schrijf, zoals het dus geïmplementeerd is in de klasse, werkt het wel, en zonder problemen.
code:
1
2
3
4
5
6
| var n:Number = 10; _root.attachMovie("startTile", "tile"+n, n); var obj:Object = eval("tile"+n); obj._x = 300; obj._y = 300; obj._rotation = 90; |
[ Voor 6% gewijzigd door Verwijderd op 05-02-2010 11:36 . Reden: een nieuwe test toegevoegd ]