Pętla for po tablicy

0

Do tej gierki http://www.lostdecadegames.com/how-to-make-a-simple-html5-canvas-game/ próbuję dodać 3 gobliny, o ile przy użyciu tablicy zrobiłem losowe dodawanie 3 różnych to nie potrafię wyświetlić jednocześnie 3. Może ktoś podpowie gdzie umieścić pętlę for for (var i=0; i<mi.length; i++)

var miReady = false;
var mi = new Array();
var mi1 = new Image();
var mi2 = new Image();
var mi3 = new Image();

mi1.src = "images/mi.png";
mi2.src = "images/mi2.png";
mi3.src = "images/mi3.png";
mi[0] = mi1;
mi[1] = mi2;
mi[2] = mi3;

var mai = Math.floor(Math.random() * mi.length);

mi[mai].onload = function () {

	miReady = true;
	
}; 
 if (miReady) {
			

		ctx.drawImage(mi[mai], moi.x, moi.y);}
0

Nie bawiłem się nigdy canvasem, ale obstawiam że to powinno być tak:

 if (miReady) 
{
     for (var i=0; i<mi.length; i++)  
        ctx.drawImage(mi[i], moi.x, moi.y);
}

Chodź w tym wypadku zobaczysz tylko jeden obrazek, ponieważ wszystkie trzy wyświetlą się w jednym miejscu - nałożą się na siebie (nie pokazałeś kodu z obiektem 'moi').
Brakuje ci miejsca, do przechowywania indywidualnych współrzędnych dla każdego obiektu.

A tak na marginesie, to się tylko tak ładnie nazywa : 'game in HTML', a tak naprawdę wszystko jest pisane w JS. Więc jeśli chcesz się w to bawić, to właśnie JS'a musisz szlifować.

0
 moi.x = 32 + (Math.random() * (canvas.width - 64));
	moi.y = 32 + (Math.random() * (canvas.height - 64));
	

To co podałeś wiesza grę, więc nie tak - tak już próbowałem

0

Może pokaż cały kod.

1

Jednocześnie możesz zniknąć tylko jednego goblina i tego znikniętego musisz wymienić z jakimś nowym, więc musisz gdzieś trzymać te wszystkie gobliny. Ten kod wymaga solidnej reimplementacji, ale na szybko wprowadziłem niezbędne modyfikacje, żeby działało.
Diff JSFiddle

1

Wytłuszczyłem miejsca które wymagały modyfikacji:

// Create the canvas
var canvas = document.createElement("canvas");
var ctx = canvas.getContext("2d");
canvas.width = 512;
canvas.height = 480;
document.body.appendChild(canvas);

// Background image
var bgReady = false;
var bgImage = new Image();
bgImage.onload = function () {
bgReady = true;
};
bgImage.src = "images/background.png";

// Hero image
var heroReady = false;
var heroImage = new Image();
heroImage.onload = function () {
heroReady = true;
};
heroImage.src = "images/hero.png";

// Monster image
var monsterReady = false;
var monsterImage = new Image();
monsterImage.onload = function () {
monsterReady = true;
};
monsterImage.src = "images/monster.png";

// Game objects
var hero = {
speed: 256 // movement in pixels per second
};
var monster = [];
var monstersCaught = 0;

// Handle keyboard controls
var keysDown = {};

addEventListener("keydown", function (e) {
keysDown[e.keyCode] = true;
}, false);

addEventListener("keyup", function (e) {
delete keysDown[e.keyCode];
}, false);

// Reset the game when the player catches a monster
var reset = function (monsterNumber) {
hero.x = canvas.width / 2;
hero.y = canvas.height / 2;

// Throw the monster somewhere on the screen randomly

** if(monsterNumber == null)**
** { for(var i = 0; i < 3; i++)**
** {**
** var x = 32 + (Math.random() * (canvas.width - 64));**
** var y = 32 + (Math.random() * (canvas.height - 64));**
** monster.push({x: x, y: y});**
** }**
** }**
** else**
** {**
var x = 32 + (Math.random() * (canvas.width - 64));
** var y = 32 + (Math.random() * (canvas.height - 64));**
** monster[monsterNumber].x = x;**
** monster[monsterNumber].y = y;**
** }**
};

// Update game objects
var update = function (modifier) {
if (38 in keysDown) { // Player holding up
hero.y -= hero.speed * modifier;
}
if (40 in keysDown) { // Player holding down
hero.y += hero.speed * modifier;
}
if (37 in keysDown) { // Player holding left
hero.x -= hero.speed * modifier;
}
if (39 in keysDown) { // Player holding right
hero.x += hero.speed * modifier;
}

// Are they touching?

** for(var i = 0; i < 3; i++)**
** { **
** if (**
** hero.x <= (monster[i].x + 32)**
&& monster[i].x <= (hero.x + 32)
** && hero.y <= (monster[i].y + 32)**
** && monster[i].y <= (hero.y + 32)**
** ) {**
** ++monstersCaught;**
** reset(i);**
** }**
** }**
};

// Draw everything
var render = function () {
if (bgReady) {
ctx.drawImage(bgImage, 0, 0);
}

if (heroReady) {
	ctx.drawImage(heroImage, hero.x, hero.y);
}

** if (monsterReady) {**
** * for(var i = 0; i < 3; i++)***
** ctx.drawImage(monsterImage, monster[i].x, monster[i].y);**
** }**

// Score
ctx.fillStyle = "rgb(250, 250, 250)";
ctx.font = "24px Helvetica";
ctx.textAlign = "left";
ctx.textBaseline = "top";
ctx.fillText("Goblins caught: " + monstersCaught, 32, 32);

};

// The main game loop
var main = function () {
var now = Date.now();
var delta = now - then;

update(delta / 1000);
render();

then = now;

// Request to do this again ASAP
requestAnimationFrame(main);

};

// Cross-browser support for requestAnimationFrame
var w = window;
requestAnimationFrame = w.requestAnimationFrame || w.webkitRequestAnimationFrame || w.msRequestAnimationFrame || w.mozRequestAnimationFrame;

// Let's play this game!
var then = Date.now();
reset();
main();

1 użytkowników online, w tym zalogowanych: 0, gości: 1