webForumDet fria alternativet

Objektproblem

3 svar · 172 visningar · startad av Andy

AndyMedlem sedan sep. 2001138 inlägg
#1

Halloj

Tänkte lära mig att göra egna objekt lite bättre.
Har en div på en sida som symboliserar solen. Runt denna cirkulerar en annan div som skall föreställa jorden, som i sin tur har en div som symboliserar månen kretsande omkring sig. Får det dock inte att fungera med både jorden och månen cirkulerande på samma gång. Vad gör jag för fel?

<html>
<head>
<title></title>

<SCRIPT LANGUAGE="JavaScript" TYPE="text/javascript">
function planet(planetName,parentPlanet,radie) {
	this.planetName = planetName
	this.parentPlanet = parentPlanet
	this.radie = radie
	this.vinkel = 0
}

function init(obj,parentPlanet,radie) {
	obj = new planet(obj,parentPlanet,radie)
	animate(obj);
}

function animate(obj) {
	x = Math.round((Math.cos(obj.vinkel * Math.PI/180) * obj.radie)) + parseInt(document.all(obj.parentPlanet).style.left);
	y = Math.round((Math.sin(obj.vinkel * Math.PI/180) * obj.radie)) + parseInt(document.all(obj.parentPlanet).style.top);
	document.all(obj.planetName).style.left = x
	document.all(obj.planetName).style.top = y
	obj.vinkel = (obj.vinkel == 360) ? 1 : obj.vinkel + 2;
	newObj = obj
	obj.timeout = setTimeout('animate(newObj)', 1);
}
</SCRIPT>

</head>

<body onLoad="init('earth','sun',100); init('moon','earth',50);">

<div id="moon" style="position:absolute; top:0px; left:0px;">Moon</div>

<div id="earth" style="position:absolute; top:0px; left:0px;">Earth</div>

<div id="sun" style="position:absolute; top:300px; left:400px;">Sun</div>

</body>

</html>
JojoxxMedlem sedan juni 20004 308 inlägg
#2

Utan att testa så säger jag att felet ligger i din setTimeout. När den aktiveras körs detta;

animate(newObj)

Vad är då newObj? Jo, det är sen senaste tilldelningen som sker i föregående körning av funktionen animate(), och eftersom det är samma funktion som anropas från init() varje gång du skapar ett nytt objekt vet du inte vilket objekt som senast kördes. Resultatet av scriptet blir således ovisst. Antagligen pannkaka vilket det brukar bli när något kan bli fel ;)

------------------
webForum stängt 15-17 feb. Läs mer.

/ Jojoxx
moderator wF

AndyMedlem sedan sep. 2001138 inlägg
#3

Misstänkte själv att det var där problemet låg. Hur löser jag det då?

JojoxxMedlem sedan juni 20004 308 inlägg
#4

Du kan ex. skicka med namnet på objektet istället för själva objektet och sedan använda eval för att plocka fram det.

Exempel:

var foo="En sträng.";
var bar=eval('foo');
alert(bar);

------------------
webForum stängt 15-17 feb. Läs mer.

/ Jojoxx
moderator wF

123 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
120 ms — hämta tråd, inlägg och bilagor (db)