Heedless
%Europe/Berlin %990 %2007, 00:45
IK had snel dit ding in elkaar gezet:
http://deluchtissomsblauw.nl/werk/neeltje/site.html
Elk hokje dat je ziet is een losse afbeelding, 100 in totaal. Deze worden via een movieClipLoader ingeladen in 100 movieclips die vlak1, vlak2, vlak3 enz heten en die met z'n allen in een hoofd MC zitten, deze heet ook 'hoofd'.
In deze swf zit een onMouseMove die er voor zorgt dat alle 100 holdertjes telkens bekijken of ze binnen de stage vallen, zo ja, dan laten ze de afbeelding zien, zo niet, dan unloaden ze de afbeelding weer, dit om rekenkracht te besparen.
Maar als ik dit wil doen met bijv 200 x 200 afbeeldingen o.i.d. dan is het natuurlijk niet te doen om alle holders telkens te laten checken of ze zichtbaar moeten zijn, dat kost veel te veel rekenkracht.
Eerst wou ik dit oplossen door niet alle holders aan te spreken maar uit te rekenen welke er binnen de stage vallen en alleen die aan te spreken, maar dan heb je daar omheen nog steeds een hele lading lege MC's die toch ook geheugen gebruiken.
Dus wat ik nu wil doen, is een aantal MCs aanmaken, die zo verplaatsen dat de stage altijd gevult blijft, dus als ze links het scherm uitgaan, dan komen ze rechts weer terug. En dat aan alle kanten.
Omdat ik ze allemaal wil kunnen slepen moeten ze in een hoofd MC zitten, en omdat ze daar in zitten kan ik niet simpel o.i.d. gebruiken. Daarom gebruik ik localToGlobal en terug om uit te rekenen waar ze staan en waar ze heen moeten.
Dit werkt... een beetje... als je alleen naar links ofzo schuift dan werkt het +-, maar schuif je schuin dan gaat het al heel snel fout. En sowieso verplaatsen ze zich niet zoals ik zou verwachten. Er ontstaan gaten en overlappingen. Je kan het zien in de swf die ik bij deze post heb zitten.
Is er iemand die mij op weg kan helpen hoe dit op te lossen?
Mijn code op het moment:
[as] hoofd.onPress = function() {
this.startDrag(false);
this.onMouseMove = function() {
for (i=1; i<=kolommen*rijen; i++) {
var doel:MovieClip = this["vlak"+i];
var point:Object = {x:0, y:0};
doel.localToGlobal(point);
if (point.x<-1*afbeeldingBreedte) {
trace ("kolommen: "+kolommen);
trace ("afbeeldingBreedte: "+afbeeldingBreedte);
trace (((kolommen-2)*afbeeldingBreedte));
var point:Object = {x:((kolommen-1)*afbeeldingBreedte), y:0};
this.globalToLocal(point);
doel._x = point.x;
} else if (point.x>Stage.width+afbeeldingBreedte) {
var point:Object = {x:(-1*afbeeldingBreedte), y:0};
this.globalToLocal(point);
doel._x = point.x;
}
var point:Object = {x:0, y:0};
doel.localToGlobal(point);
if (point.y<-1*afbeeldingHoogte) {
var point:Object = {x:0, y:((rijen-1)*afbeeldingHoogte)};
this.globalToLocal(point);
doel._y = point.y;
} else if (point.y>Stage.height+afbeeldingHoogte) {
var point:Object = {x:0, y:(-1*afbeeldingHoogte)};
this.globalToLocal(point);
doel._y = point.y;
}
}
};
};
hoofd.onRelease = hoofd.onReleaseOutside=function () {
this.stopDrag();
delete this.onMouseMove;
};
Naar links schuiven werkt niet (meer), maar de andere kanten op, zoals boven en onder laten wel zien wat mijn probleem is.
http://deluchtissomsblauw.nl/werk/neeltje/site.html
Elk hokje dat je ziet is een losse afbeelding, 100 in totaal. Deze worden via een movieClipLoader ingeladen in 100 movieclips die vlak1, vlak2, vlak3 enz heten en die met z'n allen in een hoofd MC zitten, deze heet ook 'hoofd'.
In deze swf zit een onMouseMove die er voor zorgt dat alle 100 holdertjes telkens bekijken of ze binnen de stage vallen, zo ja, dan laten ze de afbeelding zien, zo niet, dan unloaden ze de afbeelding weer, dit om rekenkracht te besparen.
Maar als ik dit wil doen met bijv 200 x 200 afbeeldingen o.i.d. dan is het natuurlijk niet te doen om alle holders telkens te laten checken of ze zichtbaar moeten zijn, dat kost veel te veel rekenkracht.
Eerst wou ik dit oplossen door niet alle holders aan te spreken maar uit te rekenen welke er binnen de stage vallen en alleen die aan te spreken, maar dan heb je daar omheen nog steeds een hele lading lege MC's die toch ook geheugen gebruiken.
Dus wat ik nu wil doen, is een aantal MCs aanmaken, die zo verplaatsen dat de stage altijd gevult blijft, dus als ze links het scherm uitgaan, dan komen ze rechts weer terug. En dat aan alle kanten.
Omdat ik ze allemaal wil kunnen slepen moeten ze in een hoofd MC zitten, en omdat ze daar in zitten kan ik niet simpel o.i.d. gebruiken. Daarom gebruik ik localToGlobal en terug om uit te rekenen waar ze staan en waar ze heen moeten.
Dit werkt... een beetje... als je alleen naar links ofzo schuift dan werkt het +-, maar schuif je schuin dan gaat het al heel snel fout. En sowieso verplaatsen ze zich niet zoals ik zou verwachten. Er ontstaan gaten en overlappingen. Je kan het zien in de swf die ik bij deze post heb zitten.
Is er iemand die mij op weg kan helpen hoe dit op te lossen?
Mijn code op het moment:
[as] hoofd.onPress = function() {
this.startDrag(false);
this.onMouseMove = function() {
for (i=1; i<=kolommen*rijen; i++) {
var doel:MovieClip = this["vlak"+i];
var point:Object = {x:0, y:0};
doel.localToGlobal(point);
if (point.x<-1*afbeeldingBreedte) {
trace ("kolommen: "+kolommen);
trace ("afbeeldingBreedte: "+afbeeldingBreedte);
trace (((kolommen-2)*afbeeldingBreedte));
var point:Object = {x:((kolommen-1)*afbeeldingBreedte), y:0};
this.globalToLocal(point);
doel._x = point.x;
} else if (point.x>Stage.width+afbeeldingBreedte) {
var point:Object = {x:(-1*afbeeldingBreedte), y:0};
this.globalToLocal(point);
doel._x = point.x;
}
var point:Object = {x:0, y:0};
doel.localToGlobal(point);
if (point.y<-1*afbeeldingHoogte) {
var point:Object = {x:0, y:((rijen-1)*afbeeldingHoogte)};
this.globalToLocal(point);
doel._y = point.y;
} else if (point.y>Stage.height+afbeeldingHoogte) {
var point:Object = {x:0, y:(-1*afbeeldingHoogte)};
this.globalToLocal(point);
doel._y = point.y;
}
}
};
};
hoofd.onRelease = hoofd.onReleaseOutside=function () {
this.stopDrag();
delete this.onMouseMove;
};
Naar links schuiven werkt niet (meer), maar de andere kanten op, zoals boven en onder laten wel zien wat mijn probleem is.