PDA

Volledige versie bekijken : Parent aanroepen in class


Mattie100
%Europe/Berlin %502 %2008, 13:03
Ik zit met een probleempje. Ik heb een class block.as en daarin heb ik een functie initRectangle als ik in deze functie probeer de width van de parent aan te roepen krijg ik een error.

TypeError: Error #1009: Cannot access a property or method of a null object reference. at block/::initRectangle() at block$iinit() at game_fla::playField_2/game_fla::frame1()

Het vreemde is als ik het probeer aan te roepen in de clickBlock dan krijg ik wel gewoon de goede waarde terug. Als ik hem in de contructor aanroep krijg ik ook een error. Ik heb al een paar uur zitten proberen en zoeken op google, kan iemand mij misschien helpen?

package {

import flash.display.*;
import flash.events.*;
import flash.geom.*;

public class block extends MovieClip {

private var blockType:Number;
private var yBeginPos:Number;
private var xBeginPos:Number;
private var myRect:Rectangle;

function block(myType:Number) {
this.blockType = myType;
this.yBeginPos = this.y;
this.xBeginPos = this.x;

this.addEventListener(MouseEvent.MOUSE_DOWN, clickBlock);
this.addEventListener(MouseEvent.MOUSE_UP, releaseBlock);
this.addEventListener(MouseEvent.MOUSE_OUT, releaseBlock);

initRectangle();
}

private function initRectangle():void {
trace((this.parent as MovieClip));
myRect = new Rectangle((this.parent as MovieClip).width/2 + this.width/2,
(this.parent as MovieClip).height/2 + this.height/2,
(this.parent as MovieClip).width - this.width,
(this.parent as MovieClip).height - this.height);
}

private function clickBlock(eventObject:MouseEvent) {
if (this.blockType == 1) {

this.startDrag(false, myRect);
}
else {
this.startDrag(false);
}
}

private function releaseBlock(eventObject:MouseEvent) {
this.stopDrag();
}
}
}

Met vriendelijke groet,
Matthijs

Anti
%Europe/Berlin %521 %2008, 13:31
Ik denk dat je dit beter afhandelt in je parent zelf. Je kan dan in je block klasse een event dispatchen waarop de parent zichzelf gaat resizen.

Neuro
%Europe/Berlin %531 %2008, 13:45
Als je hem in de constructor aanroept hem je hem nog niet aan de displaylist toegevoegd (met addChild)
Dus op dat moment heeft hij nog geen parent en is het logisch dat de parent null is :)

Dus je zou de initRectangle() functie pas mogen aanroepen na dat je hem hebt toegevoegd aan de display list

Je kan dit manueel doen of met een ADDED_TO_STAGE Event (wel pas beschikbaar vanaf player 9.0.28??, dus dit zal niet met 9.0.0 players werken)

Maar zoals Anti zegt, beter in de parent zelf afhandelen :)