2015-05-20, 11:19
  #1
Medlem
Min kod fungerar inte , försöker få min bild att flytta sig med hjälp av piltangenterna, är det någon som ser vart jag har gjort fel?

Edit: Glömde att tillägga har console.log endast för att se ifall knapptryckningarna registreras vilket de inte gör

Kod:
<!DOCTYPE html>
<html lang="sv">
	<head>	
		<meta charset="utf-8" />
		<title>Laboration 1: Canvas Animering</title>
		<style type="text/css">	</style>
	
	</head>
	<body>
		<canvas id="myCanvas" width="500" height="400" style="border:1px solid #c3c3c3;">
		Canvas fungerar inte med din webbläsare
		</canvas>
		
		<script>
		var canvas = document.getElementById("myCanvas");
		var context = canvas.getContext("2d");
		var minBild = new Image();
		minBild.src = "Lab1.png";
		var x = 0;
		var y = 0;
			//Bilden
			minBild.addEventListener("load", ritaAllt, false);
			canvas.addEventListener("keypress", update, false);
			
			function ritaAllt() {
				context.clearRect(0, 0, canvas.width, canvas.height);
				context.drawImage(minBild, x, y, 50, 50)
				// Fyrkanten 
				context.fillStyle="#FF0000";
				context.fillRect(205,10,100,100);
				//Cirkeln
				context.beginPath();
				context.arc(250, 200, 60, 0, 2 * Math.PI, false);
				context.fillStyle = 'yellow';
				context.fill();
				//Halvmåne
				context.beginPath();
				context.arc(250, 300, 70, 3.5, 0.5, true);
				context.closePath();
				context.fillStyle = 'green';
				context.fill();
				context.strokeStyle = '#550000';
				context.stroke();
								}
								
			function update(event) {
				if (event.keyCode == 37) {
				console.log("vänster");
										}
				if (event.keyCode == 38) {
				console.log("upp");
										}
				if (event.keyCode == 39) {
				console.log("höger");
										}
				if (event.keyCode == 40) {
				console.log("ner");
										}
				ritaAllt();
									}
		</script>
	</body>
</html>
		

		
		
		
		
		
		
		
Citera
2015-05-20, 11:29
  #2
Medlem
Tror inte du får piltangenterna i keypress-eventet. Testa köra keydown istället.

edit: vet inte heller hur det fungerar med att lyssna på key-events på en canvas. kör på window istället.
__________________
Senast redigerad av AVGASBARN 2015-05-20 kl. 11:32.
Citera
2015-05-20, 11:42
  #3
Medlem
Citat:
Ursprungligen postat av AVGASBARN
Tror inte du får piltangenterna i keypress-eventet. Testa köra keydown istället.

edit: vet inte heller hur det fungerar med att lyssna på key-events på en canvas. kör på window istället.


Hmm... fungerade nu med keypress, ändrade det till document..... istället för canvas

Kod:
document.addEventListener("keypress", update, false);

Hur skulle jag göra för att inte låta bilden gå utanför canvas?

Har provat att skapa en if sats där den kollar ifall x och y är större än canvas width och height men det fungerade inte :/
Citera
2015-05-20, 12:02
  #4
Medlem
Citat:
Ursprungligen postat av Mammutheee
Hmm... fungerade nu med keypress, ändrade det till document..... istället för canvas
Aha, kanske är lite olika beroende på browsers osv. Jag testade bara snabbt via jsfiddle med chrome.

Citat:
Ursprungligen postat av Mammutheee
Hur skulle jag göra för att inte låta bilden gå utanför canvas?

Har provat att skapa en if sats där den kollar ifall x och y är större än canvas width och height men det fungerade inte :/
Du måste kolla så x+bildens bredd inte blir större än width. Och på samma sätt för y och height då.
Citera
2015-05-20, 12:06
  #5
Medlem
Istället för if-satser kan du köra med min() och max() i stil med
Kod:
    x = Math.min(Math.max(0,x), canvas.width-50);
    y = Math.min(Math.max(0,y), canvas.height-50);
efter att du ökat på x och y. -50 är för att du ritar ut bilden som 50x50 px.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in