Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript HTML5画布-drawImage不工作(仅当出现错误时)_Javascript_Html_Canvas - Fatal编程技术网

Javascript HTML5画布-drawImage不工作(仅当出现错误时)

Javascript HTML5画布-drawImage不工作(仅当出现错误时),javascript,html,canvas,Javascript,Html,Canvas,我正在尝试创建一个简单的画布游戏。我开始使用游戏循环(更新、渲染功能)绘制游戏的所有元素。我试图绘制简单的图像,但是当我尝试使用它的函数类的一些特性来绘制图像时,它没有显示任何内容。NET除非数组项目符号[]包含所有具有正确对象的对象 我观察到,如果我故意犯了一个错误,那就是子弹。为什么只有在发生错误时才会绘制,但并非总是如此 谢谢大家! // Create the canvas var canvas = document.createElement("canvas"); var ctx = c

我正在尝试创建一个简单的画布游戏。我开始使用游戏循环(更新、渲染功能)绘制游戏的所有元素。我试图绘制简单的图像,但是当我尝试使用它的函数类的一些特性来绘制图像时,它没有显示任何内容。NET除非数组项目符号[]包含所有具有正确对象的对象

我观察到,如果我故意犯了一个错误,那就是子弹。为什么只有在发生错误时才会绘制,但并非总是如此

谢谢大家!

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

// Bullet class, defining it's proprieties
var Bullet = function (x,y,orientation) {
    this.x = x;
    this.y = y;
    this.speed = 512;
    this.orientation = orientation;
    if (orientation == 0)
    {
        var bulletImageUp = new Image();
        bulletImageUp.src = "images/bullet-up.png";
        this.image = bulletImageUp;
    }
    else if (orientation == 90){
        var bulletImageRight = new Image();
        bulletImageRight.src = "images/bullet-right.png";
        this.image = bulletImageRight;
    }
    else if (orientation == 180){
        var bulletImageDown = new Image();
        bulletImageDown.src = "images/bullet-down.png";
        this.image = bulletImageDown;
    }
    else if (orientation == 270){
        var bulletImageLeft = new Image();
        bulletImageLeft.src = "images/bullet-left.png";
        this.image = bulletImageLeft;
    }    
    this.draw  = function () {
        ctx.drawImage(this.image, this.x, this.y);
    }
}

// The array containing all the bullets objects
var bullets = [];

// Update game objects
var update = function (modifier) {
// When I press a key it executes 
bullets.push(new Bullet(tank.x, tank.y, tank.orientation));
};

// Draw everything
var render = function () {
    for ( i=0; i<bullets.length; i++) {
        bullets[i].draw()
    }
};

// The main game loop
var main = function () {
    var now = Date.now();
    var delta = now - then;
    update(delta / 1000);
    render();
    then = now;
};
//创建画布
var canvas=document.createElement(“canvas”);
var ctx=canvas.getContext(“2d”);
canvas.width=512;
canvas.height=480;
document.body.appendChild(画布);
//Bullet类,定义它的属性
变量项目符号=函数(x、y、方向){
这个.x=x;
这个。y=y;
这个速度=512;
这个方向=方向;
如果(方向==0)
{
var bulletImageUp=新图像();
bulletImageUp.src=“images/bullet-up.png”;
this.image=bulletImageUp;
}
否则如果(方向==90){
var bulletImageRight=新图像();
bulletImageRight.src=“images/bullet right.png”;
this.image=bulletImageRight;
}
否则如果(方向==180){
var bulletImageDown=新图像();
bulletImageDown.src=“images/bullet-down.png”;
this.image=bulletImageDown;
}
否则如果(方向==270){
var bulletImageLeft=新图像();
bulletImageLeft.src=“images/bullet left.png”;
this.image=bulletImageLeft;
}    
this.draw=函数(){
ctx.drawImage(this.image,this.x,this.y);
}
}
//包含所有项目符号对象的数组
var=[];
//更新游戏对象
变量更新=函数(修饰符){
//当我按下一个键时,它就会执行
推(新子弹(坦克x,坦克y,坦克方向));
};
//画一切
var render=函数(){

对于(i=0;ipresubly),调用
render()
时不会加载图像。您应该预加载这4个图像,然后在
项目符号()中
Constructor,只需指向四个已加载的图像中的一个。每次创建一个图像时,您都会加载一个新项目符号。您应该单独加载图像,将它们存储在数组中,并等待它们加载完毕。此外,您是否在任何位置使用requestAnimationFrame?是的,我使用的是requestAnimationFrame(主);很抱歉之前没有提及。如果您为我们创建一个JSFIDLE示例,我们可以帮助您更轻松地解决问题