Archief - Vraagje ivm resizehandler

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.

GregoryCo

Legacy Member
Beste

Als eindwerk moeten wij een film festivalsite ineenstoppen adhv OOP as3,
(met FlexBuilder).

Maar ik zit met een irritant probleem. Namelijk:

Ik heb een Main klasse waarin wordt gepreload en dus van frame 1 (Main klasse) naar de Application klasse (frame2) springt.

En in die klasse Main heb ik ook een resizehandler (die zowel preloader als Application centreert), en daar komt het probleem...

Als je naar onderstaand adres gaat zul je zien dat ik dus een dogtag linksboven (ID ketting) en een menu heb onderaan. Bij het resizen verdwijnen die elementen aangezien men hele Application gecentreerd staat, en dus ook mijn dogtag en menu, die op hun ook gepostioneerd zijn in Application zelf.

Iemand die mij kan helpen met men probleem?
Want als ik dit moet gaan presenteren en men layout staat f*cked up, dan zou ik wel eens in problemen kunnen geraken :)

Filmfestival Fata Morgana − Kinepolis Kortrijk, President Kennedylaan 100A, 8500 Kortrijk, België

Thanks!
Ps. nog niet letten op positie van menu en lettertypes enz, nog aan bezig

Mvg

Zero Grav

Legacy Member
Die main klasse kunt ge best enkel en alleen gebruiken om uw preloader te handlen en te resizen. Van het moment dat ge dan in frame 2 zit kunt ge de basis elementen qua resizing in Application gaan handlen en Main gewoon vergeten.

Uw Applicationklasse neemt toch ook 100% breedte in, dus ik zie niet direct in waarom ze gecentreerd moet worden.

GregoryCo

Legacy Member
Heb in de main eens het resizen weggelaten van de Application klasse.
Nu komt die dogtag (logischerwijze) niet meer uit de stage, wat dus goed is, maar nu wil mijn pagecontent zelf ook niet meer resizen nadat ik er in Application zelf een resizehandler heb opgestopt (op de content). Ik dacht dat dit geen probleem zou mogen zijn maar wil precies toch niet werken.

Heb dan maar eens geprobeerd van die in de PageFactory te stoppen, maar werkt ook niet.

Hij komt nochtans steeds in de resizehandler functie als ik die trace.

Bedankt voor de hulp

Zero Grav

Legacy Member
Sowieso doet ge het resizen in de View klasse, degene die extend van Sprite/MovieClip en die wat ge effectief toont. De Factory klasses zijn bedoeld om andere elementen aan te maken (I never use them anyway).

Dus het resizeHandlen doet ge in de klasse waarin de elementen staan of in de elementen zelf. In dit geval dus in de Application klasse. En dan is het toch maar zo simpel als bijvoorbeeld dees:

Code:
//Application extends Sprite

private function resizeHandler( e:Event ): void {
    if(dogTag) {
        dogTag.x = 50;
        dogTag.y = 0;
    }
    
    if(background) {
        background.width = stage.stageWidth;
        background.height = stage.stageHeight;
    }
}

En anders is het tijd om eens wat code te tonen zodat ik kan zien waar het mis gaat.

GregoryCo

Legacy Member
Het is zo dat de Application overerft van een klasse die ik heb aangemaakt, BasicSprite, waar de getters en setters width en height enz worden aangemaakt.

Zo kan ik _width en _height gebruiken ipv stage.stageWidth en stage.stageHeight.

Code:
public class Application extends BasicSprite
{
    public function Application()
    {
    // hier worden ook alle objecten van in orderstaande functie aangemaakt, maar heb dit hier niet gepost

    this.x = _width / 2 - this.width / 2;
    this.y = _height / 2 - this.height / 2;

    // ik heb this.addEv... gebruikt, want stage.addEv... geeft error (kan niet verwijzen naar een object dat null is, vandaar BasicSprite)
    this.addEventListener(Event.RESIZE, layout);
  }


override protected function layout():void
		{	
                        trace("resizehandler");	
			this.x = _width / 2 - this.width / 2;
			this.y = _height / 2 - this.height / 2;
			
			if(dogtag)
			{
				dogtag.x = 50;
                                dogtag.y = -100;
			}
                        if(page)
			{
				page.x = _width / 2 - page.width / 2;
				page.y = _height / 2 - page.height / 2;
			}
			
			// MENU
			menu.x = _width / 2 - menu.width / 2;
			menu.y = _height - menu.height/2;
			
			// MAP
			map.x = 0;
			map.y = _height;
			
			//LUCHT
			lucht.width = _width;
			lucht.y = 0;
			lucht.x = 0;
			
			dogtag.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler);
			
			SWFAddress.addEventListener(SWFAddressEvent.CHANGE, swfaddressChangeHandler);
		}
}

Het zit dus zo dat men "map" een hoge resolutie heeft van 4000*5xxx, de map kan je verslepen adhv rectangle bounds die ik heb aangemaakt.
Kweet niet of het hier iets mee te maken heeft?

Ik heb ook opgemerkt dat de layout functie 2x wordt uitgevoerd bij het starten (zonder resizen) van de applicatie

De methode die u beschreef is hier toegepast, maar werkt nog niet.

Bedankt

GregoryCo

Legacy Member
Na wat zaken nog geprobeerd te hebben is het dan toch gelukt!

Heb een eventlistener toegevoegd (stage.addEventListener(Event.RESIZE, resizeHandler);) in mijn override protected function layout() en daar kan ik wel de stage oproepen.
Dogtag en map blijven dus staan en content + menu resized mee!

Thanks Zero Grav, repke

Zero Grav

Legacy Member
Die hele shizzle die ge aan de hand hebt met uw BasicSprite (als ik uw comment lees) kunt ge vermijden door gewoon in uw constructor te zetten:

Code:
this.addEventListener( Event.ADDED_TO_STAGE, addedToStageHandler );

private function addedToStageHandler( e:Event ):void {
     //rest van de code
}
If this works for you, ok, maar op mij komt het alleszins verwarrend over en heeft het geen echte meerwaarde omdat het voortvloeit uit een 'bug'.

Waarom koppelt ge uw SWFAddressEvent.CHANGE trouwens in uw layout functie? Dat betekent dat die élke keer opnieuw gekoppeld wordt als ge uw venster gaat resizen.

Maar again, waarom Application centreren? Application neemt de hele breedte en hoogte van de applicatie in, dus dat moet niet gecentreerd worden. Wat gij misschien wilt centreren is die achtergrond IN application.

GregoryCo

Legacy Member
You're right, applicatie centreren weg gedaan en werkt nog steeds, thanks.

Ivm SWFAddressEvent.CHANGE, ben er nog aan bezig, maar nog eens thanks om op te merken :)

Btw kzou u wel willen een repke geven, maar kmoet daarvoor eerst iemand anders reppen, werkt anders nie
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