Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.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 使用键盘旋转画布对象_Javascript_Canvas_Rotation - Fatal编程技术网

Javascript 使用键盘旋转画布对象

Javascript 使用键盘旋转画布对象,javascript,canvas,rotation,Javascript,Canvas,Rotation,这是我的第一个问题。 我正在做一个小行星游戏拷贝,我从宇宙飞船运动开始,但是 我在js的画布中旋转它时遇到问题。问题是按下键后如何停止旋转?它在两个方向上旋转,但当我释放键时,对象返回到其初始状态 以下是代码: window.addEventListener('keydown',doKeyDown,true); window.addEventListener('keyup',doKeyUp,true); //var x = canvas.width/2; //var y

这是我的第一个问题。 我正在做一个小行星游戏拷贝,我从宇宙飞船运动开始,但是 我在js的画布中旋转它时遇到问题。问题是按下键后如何停止旋转?它在两个方向上旋转,但当我释放键时,对象返回到其初始状态

以下是代码:

window.addEventListener('keydown',doKeyDown,true);
    window.addEventListener('keyup',doKeyUp,true);
    //var x = canvas.width/2;
    //var y = canvas.height/2;
    var keys = new Array();
    function doKeyDown(evt){
        keys[evt.keyCode] = true;
    }
    function doKeyUp(evt){
        keys[evt.keyCode] = false;
    }

    var context = document.getElementById('pageCanvas').getContext('2d');
    var angle = 0;
    var angle2 = 0;
    function convertToRadians(degree) {
        return degree*(Math.PI/180);
    }

    function incrementAngle() {
        angle -= 10;
        if(angle > 360) {
            angle = 0;
        }
    }

    function decrementAngle(){
        angle2 += 10;
        if(angle2>360){
            angle2 = 0;
        }
    }



    function drawRandomlyColoredRectangle() {  

        context.save();
        context.clearRect(0,0,500,500);

        fillStyle = "#000000";
        context.fillRect(0,0,500,500);
        incrementAngle();
        decrementAngle();


        context.translate(200,200);
        if(37 in keys && keys[37]){
            context.rotate(convertToRadians(angle));
            console.log("lewo");
        };
        if (39 in keys && keys[39]){ //right
            //x += dx/5;
            //rotacja w prawo
            context.rotate(convertToRadians(angle2));
            console.log("prawo");
        };




        context.fillStyle = "green";
        context.fillRect(-25,-25,50,50);

        context.restore();
    }



   setInterval(drawRandomlyColoredRectangle, 20);
和小提琴


请提供帮助:c

只需将当前角度值存储在变量中,并在每个渲染帧中使用它

if(37 in keys && keys[37]){
    decrementAngle();
};

if (39 in keys && keys[39]){
    incrementAngle();
};

(...)

context.rotate(convertToRadians(angle));
在提出下一个问题之前,请检查并研究其他修复程序,并阅读一些教程/文章。。。

谢谢:D我知道,我读了很多文章等,但我找不到任何解决方案:/