【发布时间】:2016-05-23 16:48:51
【问题描述】:
我正在制作游戏。
我有一个“矩阵”,我用它来知道要在画布上打印什么图像,问题是矩阵以错误的顺序打印,将行作为列,当我使用键盘移动字符时不顺利,拜托了。
这是我的 js 文件
var world1 = [
["S",".","B","P"],
["W","B","P","B"],
["S",".","B",".",]
[".","B","P","B"]]
var visited1 = [
["f","f","f","f"],
["f","f","f","f"],
["f","f","f","f"],
["d","f","f","f"]]
var row=3;
var col=0;
var level = 0;
var ActualWorld=world1;
var ActualVisited=visited1;
var canvas = document.getElementById('board');
context = canvas.getContext('2d');
var width = window.innerWidth;
var height = window.innerHeight;
context.canvas.width = window.innerWidth;
context.canvas.height = window.innerHeight;
var side = height/4;
drawBoard(ActualWorld, ActualVisited);
control()
function drawBoard(world, visited)
{
unvisited = new Image();
unvisited.src = 'img/unvisited1.png';
visited = new Image();
visited.src = 'img/visited1.png'
duende = new Image();
duende.src= 'img/duendeb.png'
unvisited.onload = function(){
for (var i = 0; i <= world.length ; i++) {
for (var j = 0; j <= world.length; j++) {
if (visited1[i][j]=="f") {
context.drawImage(unvisited, side*i, side*j, side, side);
} else if (visited1[i][j]=="d") {
context.drawImage(duende, side*i,side*j, side, side);
} else {
context.drawImage(visited, side*i, side*j, side, side);
}
}
}
}
}
function control(){
window.addEventListener('keydown',this.handleKeyDown,false);
window.addEventListener('keyup',this.handleKeyUp,false);
window.addEventListener('keyleft', this.handleKeyLeft, false);
window.addEventListener('keyright', this.handleKeyRight, false);
}
function handleKeyUp(e){
var k = e.keyCode;
if (k==38 && row>0) {
ActualVisited[row][col]="t";
row=row-1;
ActualVisited[row][col]="d";
updateScreen(ActualWorld, ActualVisited);
console.log("arriba");
}
}
function updateScreen(world, visited){
context.clearRect(0, 0, width, height);
for (var i = 0; i < world.length ; i++) {
for (var j = 0; j < world.length; j++) {
if (visited[i][j]=="f") {
context.drawImage(unvisited, side*j, side*i, side, side);
} else if (visited[i][j]=="d") {
context.drawImage(duende, side*j,side*i, side, side);
} else {
context.drawImage(visited, side*j, side*i, side, side);
}
}
}
}
这是我的 html 文件
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Game</title><!-- titulo -->
<link rel="stylesheet" href="css/styles.css"><!-- enlazando archivo css -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<!-- enlazando archivo js con el juego -->
</head>
<body>
<canvas id="board" style = "border: 1px solid grey"></canvas>
<script src="js/game.js"></script>
</body>
</html>
【问题讨论】:
-
您是否尝试在循环中反转 i 和 j?我的意思是: context.drawImage(unvisited, sidej, sidei, side, side)
-
是的,但它不起作用,当我在 UpdateScreen 中访问它们时,它可以改变 i-j,但是当我尝试让它上升时,它不会移动或只是开始消失,并且出现错误控制台。
-
那么请将错误添加到您的问题中
-
我已经对代码进行了很多更改,但问题是它需要行并在应该水平时垂直打印它们。我假设在js中管理矩阵在java/c++/python中是一样的
标签: javascript html canvas html5-canvas drawimage