Volledige versie bekijken : error: object = null
Davkebelgium
%Europe/Berlin %776 %2010, 19:37
ik heb het volgende probleem:
Ik voeg volgende actions aan een buttons toe:
case "b2" :
TweenLite.to(fl_Loader_1, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(reclame_inhoud, 0.25, {x:899.75, y:597.7, scaleX:0, scaleY:0, ease:Elastic.easeIn});
TweenLite.to(filmpje, 0.25, {x:307.8, y:595.45, scaleX:0, scaleY:0, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_2, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_3, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_4, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_5, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_6, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_7, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_8, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_9, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(voorstelling, 0.50, {x:-4500, y:102.80, ease:Elastic.easeIn, onComplete: loadContact});
trace("Je klikte op 'contact'");
break;
Maar die fl_loader_'s crieer ik telkens maar in een function, example:
function loadContact():void {
TweenLite.to(contact, 0.50, {x:90, y:104, ease:Elastic.easeOut});
TweenLite.to(greep, 0.25, {x:1800, y:692, ease:Elastic.easeIn});
menubuttons.parent.setChildIndex(menubuttons, menubuttons.parent.numChildren-1);
logo.parent.setChildIndex(logo, logo.parent.numChildren-1);
for (var w:int = 0; w < 1; w++) {
buttonmeArray[w].mouseEnabled = true;
for (var v:int = 2; v <= 6; v++) {
buttonmeArray[v].mouseEnabled = true;
}
}
}
Je klikte op 'contact'
TypeError: Error #1009: Kan geen eigenschap of methode benaderen via een verwijzing naar een object dat null is.
at com.greensock::TweenLite/init()
at com.greensock::TweenLite/renderTime()
at com.greensock.core::SimpleTimeline/renderTime()
at com.greensock::TweenLite$/updateAll()
Waarom weet ik, alleen krijg ik geen oplossing in mijn hoofd!
De waarom= hij kan namelijk geen tweening voorzien voor een object dat niet bestaat op dit moment!!
Maar hoe omzeil je dan die foutmeldingen? Want de site werkt zoals het hoort. Alleen die foutmelding zou ik moeten van af geraken.
Hopelijk is mijn omschrijving duidelijk...
Helix
%Europe/Berlin %814 %2010, 20:33
Hey,
Ik zit hier met iets gelijkaardigs..
Antwoord dat ik kreeg is.. "zet er een trace tussen" en kijk wat 'null' is..
Misschien helpt dat jou wel..
W0utR
%Europe/Berlin %861 %2010, 21:39
if(fl_Loader_3 != null) {
of korter
if(fl_Loader_3)
Hiermee kijk je of het object bestaat, bestaat het, dan voer je de code uit, bestaat het niet, dan doe je niks
Davkebelgium
%Europe/Berlin %397 %2010, 10:32
if(fl_Loader_3 != null) {
dat dacht ik ook plots vannacht.
Dus eigenlijk zou ik de code zo moeten schrijven:
ALS fl_loader_1 NIET GELIJK IS aan NULL OF fl_loader_2 NIET GELIJK IS aan NULL, etc
tween alle NIET NULL'S naar x en y met easing
wanneer compleet, LAAD dan contact (bv)
Zit ik op de goeie weg?
W0utR
%Europe/Berlin %415 %2010, 10:58
Dat zou je moeten doen ja, zo voorkom je dat je probeert te tweenen op een object dat niet bestaat
if(fl_Loader_I != null) TweenLite.to(fl_Loader_8, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
Davkebelgium
%Europe/Berlin %423 %2010, 11:09
dat heb ik nu,
if ((fl_loader1 != null) | (fl_Loader_2 != null) | (fl_loader3 != null) | (fl_Loader_4 != null) | (fl_loader5 != null) | (fl_Loader_6 != null) | (fl_loader7 != null) | (fl_Loader_8 != null) | (fl_Loader_9 != null)) {
TweenLite.to(fl_Loader_1, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_2, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_3, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_4, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_5, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_6, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_7, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_8, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
TweenLite.to(fl_Loader_9, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
echter, krijg ik dit als foutmelding: http://westorama.be/Scripts/errors.png
Davkebelgium
%Europe/Berlin %427 %2010, 11:15
even mededeling: je kunt denken dat ik fl_loader1 verkeerd schreef, maar als ik fl_loader_1 schrijf is het net hetzelfde hoor.
eriknoorland
%Europe/Berlin %440 %2010, 11:34
je or teken is verkeerd, moeten 2 pipes zijn ||
Davkebelgium
%Europe/Berlin %480 %2010, 12:31
okido, het werkt. thx
W0utR
%Europe/Berlin %516 %2010, 13:23
Zou je niet beter controleren of alle loaders geen null zijn?
Want stel dat fl_Loader_2 nu null is, gaat hij de code toch uitvoeren omdat fl_Loader_1 niet null was, snap je?
Wat je doet is: als fl_Loader_1 niet gelijk is aan null OF fl_Loader_2 niet gelijk is aan null
En je moet doen: als fl_Loader_2 niet gelijk is aan null EN fl_Loader_2 niet gelijk is aan null
eriknoorland
%Europe/Berlin %527 %2010, 13:40
je and operator is dan && en geen & ;)
Davkebelgium
%Europe/Berlin %447 %2010, 11:44
if (fl_Loader_1 != null) {
TweenLite.to(fl_Loader_1, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
if (fl_Loader_2 != null) {
TweenLite.to(fl_Loader_2, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
if (fl_Loader_3 != null) {
TweenLite.to(fl_Loader_3, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
if (fl_Loader_4 != null) {
TweenLite.to(fl_Loader_4, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
if (fl_Loader_5 != null) {
TweenLite.to(fl_Loader_5, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
if (fl_Loader_6 != null) {
TweenLite.to(fl_Loader_6, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
if (fl_Loader_7 != null) {
TweenLite.to(fl_Loader_7, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
if (fl_Loader_8 != null) {
TweenLite.to(fl_Loader_8, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
if (fl_Loader_9 != null) {
TweenLite.to(fl_Loader_9, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
dit werkt zonder problemen. Alleen, het is wel beetje lange code... :S
if ((fl_loader1 != null) || (fl_Loader_2 != null) || (fl_loader3 != null) || (fl_Loader_4 != null) || (fl_loader5 != null) || (fl_Loader_6 != null) || (fl_loader7 != null) || (fl_Loader_8 != null) || (fl_Loader_9 != null)) {
en
if ((fl_loader1 != null) && (fl_Loader_2 != null) && (fl_loader3 != null) && (fl_Loader_4 != null) && (fl_loader5 != null) && (fl_Loader_6 != null) && (fl_loader7 != null) && (fl_Loader_8 != null) && (fl_Loader_9 != null)) {
werken niet. De errors blijven komen... :s
eriknoorland
%Europe/Berlin %449 %2010, 11:46
Misschien moet je eens gaan denken aan for loops en array's. Ik zie zoveel code herhaald worden. Daarmee kan je het aantal regels (of breedte van regels) enorm terug brengen en maakt het overzichtelijker.
Davkebelgium
%Europe/Berlin %450 %2010, 11:48
tween alle NIET NULL'S naar x en y met easing
Dit moet eigenlijk nog steeds gerealiseerd worden, denk ik. Want nu zet ik alle tweens in de if statement. Ook de nulls en niet nulls!!
Davkebelgium
%Europe/Berlin %451 %2010, 11:50
Misschien moet je eens gaan denken aan for loops en array's.
TweenLite.to(fl_Loader_9, 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
deze code zou inderdaad gemakkelijk 1 keer in een array kunnen geplaatst worden. Ik zoek dit even op hoe je code in een array kunt plaatsen ipv met objecten te werken, wat ik tot op heden gewoon was.
Davkebelgium
%Europe/Berlin %465 %2010, 12:10
even luidop denken,
ik maak variabelen van mijn tweenlite's,
like: var myTween1:TweenLite = new TweenLite(fl_Loader_9, 0.25,...
var myTween2:TweenLite = new TweenLite(fl_Loader_8, 0.25,...
etc
dan creëer ik een array
like: var myTweenArray:Array = [myTween1,myTween2,myTween3,myTween4,...];
dan voeg ik een for loop toe aan mijn if statement:
for (var i:int = 0; i < myTweenArray.length; i++)
{
myTweenArray[i].restart();
}
en voor de overige buttons maak ik een keuze uit mijn array als volgt:
if (fl_Loader_1 != null) {
for (var i:int = 2; i < 4; i++)
{
myTweenArray[i].restart();
}}
wat denken jullie? Ziet dit eruit als een verkorte en overzichtelijkere versie?
eriknoorland
%Europe/Berlin %471 %2010, 12:18
Ik dacht meer aan zoiets:
var loaders:Array = new Array(fl_loader_1, fl_loader_2, fl_loader_3);
for(var i:int = 0; i < loaders.length; i++){
if(loaders[i] != null){
TweenLite.to(loaders[i], 0.25, {x:-4500, y:102.80, ease:Elastic.easeIn});
}
}
Mochten je tween properties nou steeds afwijken zou je een Array van Objects kunnen maken en dan daar ook de properties bij inzetten.
Davkebelgium
%Europe/Berlin %786 %2010, 19:52
Ik dacht meer aan zoiets:
ok, dit is wat ik eigenlijk zocht in de verkorte versie, thx gast.
Alleen, for(var i:int = 0; i < loaders.length; i++){ zou soms moeten aangepast worden om de fl_loader_5 er tussen uit te halen. ik dacht aan for(var i:int = 0; i < 5; && > 5 i++){
Mochten je tween properties nou steeds afwijken zou je een Array van Objects kunnen maken en dan daar ook de properties bij inzetten.
Dat is eigenlijk niet direct de bedoeling. Maar indien dit misschien in de toekomst nog van toepassing zou komen, waar tref ik op internet een goeie tutorial aan over "array's maken met objecten", google levert zodanig veel results op dat ik niet direct een correcte en goeie oplossing aantref.
Misschien weet jij meer of iemand anders?
nogmaals thx
eriknoorland
%Europe/Berlin %787 %2010, 19:54
Op de volgende manier. Door middel van de accolades maak je een Object.
var array:Array = new Array({data:'dit is dan je data'});
sidar
%Europe/Berlin %693 %2010, 17:38
public static function tweenObjectsTo(list:Array,time:Number,toX:Number,t oY:Number,easeFunction:Function) : void
{
for(var i:int=0; i < list.length; i++)
{
TweenLite.to((list[i] as DisplayObject), time, {x:toX, y:toY, ease:easeFunction});
}
}
Het lijkt dubbel op, maar je kunt dit dan sneller herbruiken.
Just a tip.
waar tref ik op internet een goeie tutorial aan over "array's maken met objecten"
Ik neem aan dat je gewoon de Flash IDE gebruikt.
Een manier is als volgt( niet perse de beste maar het is er een).
maak een functie aan
function create ObjectListFromMovieClip(clip:DisplayObjectContaine r) : Array
{
var arr:Array = new Array();
for(var i:int=0; i < clip.numChildren; i++)
{
arr.push(clip.getChildAt(i));
}
}
var array:Array = ObjectListFromMovieClip(My_Container);
Je moet wel je objecten in een aparte movieclip gooien,
probleem is wel dat je de positieprobleempjes gaat krijgen als je alles op de stage hebt gesleept.
Een ander variant is checken wat voor class het is.
function create ObjectListFromMovieClip(clip:DisplayObjectContaine r) : Array
{
var arr:Array = new Array();
for(var i:int=0; i < clip.numChildren; i++)
{
if(clip.getChildAt(i) is My_Class)
{
arr.push(clip.getChildAt(i));
}
}
}
var array:Array = ObjectListFromMovieClip(My_Container);
Maar dan moet je wel je MovieClips klaar maken voor export en moet je ze laten afstammen van 1 class( die uiteindelijk My_Class word).
Wat ook kan is in de objecten zelf de objecten automatisch zich laten invoegen in een static array variable.
Zoals ik al zei het zijn niet de beste oplossing, ze kunnen zelfs heel lomp zijn, maar je kunt ze proberen.
vBulletin® v3.8.1, Copyright ©2000-2012, Jelsoft Enterprises Ltd.