Проходимые области в игре на холсте html5

#html #node.js #html5-canvas

#HTML #node.js #html5-холст

Вопрос:

какой метод я бы использовал, чтобы сделать моего персонажа доступным только для определенных областей? Мне действительно не нужен код, просто самый эффективный способ, как я должен это делать, спасибо.

Ответ №1:

1: Вы можете создать матрицу с 0 и 1. Ваш персонаж может перемещаться за 1, а не за 0. это очень подходит для игр с видом сверху. Codepen

 window.onload = function(){
canvas =      document.getElementById("canvas");
ctx = canvas.getContext("2d");
                                                                                
matrix =     [[0, 0, 0, 0, 0] , [1, 0, 0, 1, 1] ,  [1, 1, 1, 1, 1] ,  [1, 0, 1, 1, 1] ,  [1, 0, 1, 1, 1] ];
character = {x: 0, y : 1}
window.requestAnimationFrame(function(){_print()});

window.addEventListener('keypress', function(e){
console.log(e.key, character)
if( e.key == 'd'){
if((character.x < 4) amp;amp; (matrix[character.y][character.x 1]==1))
character.x  ;

}else if(e.key == 'w'){
if((character.y>0) amp;amp; (matrix[character.y-1][character.x]==1))
character.y--;

}else if(e.key == 'a'){
if( (character.x > 0) amp;amp; (matrix[character.y][character.x-1]==1))
character.x--;

}else if( e.key == 's'){
if( (character.y < 4) amp;amp; (matrix[character.y 1][character.x]==1))
character.y  ;
}
});


};

printMap = function(matrix){
for(let i =0; i < matrix.length; i  ){
for(let j =0; j < matrix[i].length; j  ){

if(matrix[i][j]===0){
ctx.fillStyle = "#F00";
}else{
ctx.fillStyle = "#FF0";
}
ctx.beginPath();  
ctx.rect( j * 100, i * 100, 100, 100);
ctx.fill();
}
}

}

printCharacter = function(character){

ctx.fillStyle = "#000";
ctx.beginPath();  
ctx.rect( character.x * 100   10, character.y * 100   10, 80, 80);
ctx.fill();
}

clearMap = function(){
ctx.clearRect(0,0,500,500);
}


_print = function(){

clearMap();
printMap(matrix);
printCharacter( character);  
window.requestAnimationFrame(function(){
_print();
});

}
 

2. Вы можете выполнить проверку цветных пикселей с помощью data Imagem. Ваш персонаж не может перемещаться в предопределенном цвете. (https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getImageData )

3. Вы можете использовать psychio framework, такой как box2d. (http://box2d-js.sourceforge.net /)

Комментарии:

1. хорошо, если это поможет вам … проголосуйте за мой ответ, пожалуйста!

2. я сделал, но он не будет отображаться, потому что у меня менее 15 репутации, извините. Я хочу использовать 2-й метод, но я немного смущен, поскольку в моей игре пол состоит не только из 2 сплошных цветов.. должен ли я накладывать изображение или что-то в этом роде? Извините, если это сбивает с толку, в Интернете не так много информации об этом, может быть, мне просто следует использовать первый метод, который вы сказали?

3. Да, вы можете накладывать изображения. Это лучше всего подходит, если вы используете карты плиток. en.wikipedia.org/wiki/Tile-based_video_game