Optellen en laten zien

Status
Niet open voor verdere reacties.

thec0mpler

Gebruiker
Lid geworden
14 nov 2010
Berichten
9
Ik heb een vraag. Zoals gewoonlijk hier.

- Ik wil een waarde uit een bestand halen (met PHP, maar daar gaat het dus niet over) en daar dan een bij optellen.
Dat lukt nog wel.

- Nou wil ik dat die dat in het bestand schrijft.
Dat gaat ook goed

- Maar nu wil ik dat die het herhaald om een bepaalde tijd (1.5 seconde of anders aangegeven.

Ik wil dit omdat ik probeer een spel te maken. Niet dat iedereen het moet spelen, maar wil het kunnen maken. En wil ook nog wat dingen bijleren, zoals ik nu hier vraag.
Ben een beetje bleek op JavaScript gebied.

Ik dacht het zo te doen, maar dat lukt niet:
HTML:
<script language="JavaScript">

function grondstoffen() {
	[PHP]<?php	
	$grondstoffen = file_get_contents($file_grondstoffen);
	list($tijd, $grondstof2) = split("-", $grondstoffen);
	$grondstof = explode(":", $grondstof2);
	list($hout, $leem, $ijzer) = $grondstof;

	$hout1 = $hout + 1;
	$leem1 = $leem + 1;
	$ijzer1 = $ijzer + 1;
	
		// schrijf de volgende tekst in het bestand
		$invoegen = time() . "-" . $hout1 . ":" . $leem1 . ":" . $ijzer1;
		// open het bestand
		$fopen = fopen($file_grondstoffen, "w");
		// schrijf '$invoegen' in het bestand
		fwrite($fopen, $invoegen);
		// sluit het bestand
		fclose($fopen);
		
	echo "display = '$invoegen';";
	?>
		
	document.all.grondstoffen.innerHTML = display
}
	
setTimeout("grondstoffen()", 1000);
</script>
 
mkay, wat is precies de bron-output als je deze pagina runt op je webserver? Kan je die ook posten?

Ik denk dat het komt omdat deze regel ergens fout gaat:[JS]document.all.grondstoffen.innerHTML = display
[/JS]Je kan beter zoiets doen:[JS]document.getElementById('grondstoffen').innerHTML = display;
[/JS]en wel als html zoiets:
HTML:
<xxx id='grondstoffen'>hier komen de grondstoffen te staan</xxx>
waar xxx een div of span of whatever is.


Also, je kan pas document.body. of document.getElementById(). aanroepen als dit element AL BESTAAT. Dus eerst het element, dan pas de Javascript code. Maargoed, je gebruikt een timeout, dus tenzij het laden van de pagina's body langer dan een seconde duurt zou je geen probleem moeten hebben.



:thumb:
 
Thanks!

Dankjewel, maar hoe zorg ik er voor dat die automatisch de waarde update?

Met setInterval("grondstoffen()", 1000); doet hij dat niet?


HTML:
<script language="JavaScript">
function grondstoffen() {
	<?php
	$hout1 = $hout + (time() - $tijd) / 10;
	$leem1 = $leem + (time() - $tijd) / 10;
	$ijzer1 = $ijzer + (time() - $tijd) / 10;
	
		$invoegen = time() . "-" . $hout1 . ":" . $leem1 . ":" . $ijzer1;
		$fopen = fopen($file_grondstoffen, "w");
		fwrite($fopen, $invoegen);
		fclose($fopen);
		
		$grondstoffen = file_get_contents($file_grondstoffen);
		list($tijd, $grondstof2) = split("-", $grondstoffen);
		$grondstof = explode(":", $grondstof2);
		list($hout, $leem, $ijzer) = $grondstof;
		$hout = round($hout, 0);
		$leem = round($leem, 0);
		$ijzer = round($ijzer, 0);
		
	echo "display = '$hout - $leem - $ijzer';";
	?>		
	document.getElementById('grondstoffen').innerHTML = display;	
}
setInterval("grondstoffen()", 1000);
</script>
 
Laatst bewerkt:
Bijna opgelost...

Ik heb nu dit:
HTML:
<script language="JavaScript">
	<?php
	echo "
	var invoegen_hout = parseFloat('$hout');
	var invoegen_leem = parseFloat('$leem');
	var invoegen_ijzer = parseFloat('$ijzer');
	
	var level = parseInt('$level');
	";
	?>

function grondstoffen() {
	invoegen_hout = (1 * invoegen_hout) + (1 * 1)
	invoegen_leem = invoegen_leem + 1
	invoegen_ijzer = invoegen_ijzer + 1 
	
	display = invoegen_hout + " - " + invoegen_leem + " - " + invoegen_ijzer
    document.getElementById('grondstoffen').innerHTML = display; 
	
	setInterval("grondstoffen()", 5000);
}
</script>

Eerst telt die er wel 1 bij op, maar dan ineens 2, 3, 4 enz... :confused:

En na een tijdje gaat het steeds sneller en hoger met de getallen....
 
Laatst bewerkt:
Ja, natuurlijk. Dit komt omdat je een setInterval gebruikt. Dus: eerst 1x aanroepen, dan 5 seconden wachten, dan opeens 2x, en dan 4x, etcetera.

Verander de setInterval in een setTimeout, of verplaats de setInterval naar buiten de functie.

Ohja, trouwens, de 1e parameter van setIntervan en setTimeout is een functie-reference, niet een string. Dus:
HTML:
<script type="text/javascript">
 <?php
    // php gedoe
 ?>
 
function grondstoffen()
{
    invoegen_hout = invoegen_hout + 1;
    invoegen_leem = invoegen_leem + 1;
    invoegen_ijzer = invoegen_ijzer + 1;
    
    display = invoegen_hout + " - " + invoegen_leem + " - " + invoegen_ijzer;
    document.getElementById('grondstoffen').innerHTML = display; 
}

   setInterval(grondstoffen, 5000);   // elke 5 seconde de functie aanroepen
</script>
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan