Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2015, 12:18   #1
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию Простая игра на canvas

Всем привет, хотел спросить, вот нашел я игру http://www.lostdecadegames.com/how-t...5-canvas-game/
Вот весь скрипт этой игры:
Код:
// 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 () {
	hero.x = canvas.width / 2;
	hero.y = canvas.height / 2;

	// Throw the monster somewhere on the screen randomly
	monster.x = 32 + (Math.random() * (canvas.width - 64));
	monster.y = 32 + (Math.random() * (canvas.height - 64));
};

// 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?
	if (
		hero.x <= (monster.x + 32)
		&& monster.x <= (hero.x + 32)
		&& hero.y <= (monster.y + 32)
		&& monster.y <= (hero.y + 32)
	) {
		++monstersCaught;
		reset();
	}
};

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

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

	if (monsterReady) {
		ctx.drawImage(monsterImage, monster.x, monster.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();
Хотел спросить, можно ли добавить на карту еще одного героя, типа чтобы можно было вдвоем играть с одной клавиатуры:
Пробовал просто продублировать функцию, после

Код:
// Hero image
var heroReady = false;
var heroImage = new Image();
heroImage.onload = function () {
	heroReady = true;
};
heroImage.src = "images/hero.png";
Вставлял такой код:
Код:
var heroReadyTwo = false;
var heroImageTwo = new Image();
heroImageTwo.onload = function () {
	heroReadyTwo = true;
};
heroImageTwo.src = "images/hero2.png";
Но оно просто заменяет главного героя и все функции с ним связаны. Скажите возможно ли тут вообще сделать еще одного игрока?? Спасибо
mishammm вне форума Ответить с цитированием
Старый 27.10.2015, 12:20   #2
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

П.с. я пока просто попробывал подгрузить еще одну картинку героя, все остальные функции я не трогал, просто хотел проверить что будет грузиться фотка, но это не так
mishammm вне форума Ответить с цитированием
Старый 27.10.2015, 15:03   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

в функцию render забыли добавить обработку для второго героя, в вашем случае просто продублируйте и замените на свои объекты:
Код:
if (heroReady) {
 ctx.drawImage(heroImage, hero.x, hero.y);
}
CodeNOT вне форума Ответить с цитированием
Старый 27.10.2015, 17:34   #4
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

Цитата:
Сообщение от CodeNOT Посмотреть сообщение
в функцию render забыли добавить обработку для второго героя, в вашем случае просто продублируйте и замените на свои объекты:
Код:
if (heroReady) {
 ctx.drawImage(heroImage, hero.x, hero.y);
}
пробовал все равно заменяет
mishammm вне форума Ответить с цитированием
Старый 27.10.2015, 17:36   #5
mishammm
Форумчанин
 
Регистрация: 21.09.2013
Сообщений: 232
По умолчанию

делал вот так:
if (heroReadyTwo) {
ctx.drawImage(heroImageTwo, hero.x, hero.y);
}
все равно просто заменяет героя на мою картинку
mishammm вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая игра Ukeeler Visual C++ 5 08.05.2012 20:50
Задача Простая игра Блондинка_Таня Помощь студентам 0 21.02.2012 11:17
Паскаль. очень простая игра Len4i]{ Помощь студентам 6 15.06.2010 11:34
Простая игра C++ Builder btf Помощь студентам 7 18.12.2009 11:14
Простая игра на ассемблере DruiD88 Помощь студентам 0 03.06.2009 04:07