Archief - FLASH: [AS 2.0] myButton._parent --> There's no property with name '_parent'

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

keybern

Legacy Member
Ik ben momenteel een bestaand flash spelletje aan het herschrijven mbv externe AS-klasses ipv code in de FLA.
Dat lukt aardig maar nu heb ik een vreemd probleempje.

In de library van mijn FLA-bestand heb ik een movieclip met daarin een button. Deze movieclip link ik met de klasse Tile. So far, so good. Ik kan vervolgens dynamisch een aantal kopieën van die movieclip vanuit mijn library aan mijn stage toevoegen, mbv. attachMovie.
Dat lukt ook. Ik zie de movieclips verschijnen en hun button werkt. (onhover enz.)

Nu doe ik hetvolgende meteen na het attachen van mijn movieclip:
Code:
newTile.tile_btn.onPress = moveToPosition;

Code:
function moveToPosition() {
     trace(this);   // --> werkt! Print iets zoals dit: _level0.tile_mc_48.tile_btn
     trace(this instanceof Button); // --> werkt uiteraard ook, print true!
     trace(this._parent);  // --> error ?!
}

De laatste regel code in moveToPosition geeft een compile error: There's no property with name '_parent'

Hoe kan dat nu? Enerzijds toont de 2de regel code aan dat this een instantie van de klasse Button is, anderzijds zou deze niet over _parent beschikken, wat tegenstrijdig is met de ActionScript 2.0 API.

( http://www.adobe.com/support/flash/...pt_dictionary/actionscript_dictionary099.html )

Breen

Legacy Member
At compile time (wanneer deze error gegenereerd wordt, is "this" een referentie naar de klasse waar die functie staat in geschreven, die duidelijk geen ._parent heeft. Flash heeft een scope probleem (waardoor "this" de button wordt bij aanroepen).

Oplossing:

1. Voeg een private property toe aan je klasse, type MovieClip (bijvoorbeeld, met naam owner)
2. Bij het initialiseren van je object, geef je een link naar de juiste movieclip mee (die je nu probeert te bereiken met ._parent)
3. Verander je eerst code line (= moveToPosition) naar (= Delegate.create(this,moveToPosition); (je moet dan natuurlijk wel de juiste klasse nog importen).
4. In je moveToPosition functie, moet je dan this nog vervangen door this.owner

Klaar :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan