帆布弹跳球,显示一个椭圆形的黑色球

高朗丹顿

JSFiddle

预期行为

样本值:速度:10;角度:45; 红色; 半径:50。

点击“射击!” 按钮,球应该移动直到它最终消失在墙壁之一的后面。请注意,我想用重力模拟现实世界的球。

每次我们单击“射击”,都应向balls阵列中再添加一个球,该球也将被绘制。

怎么了

单击一次/多次拍摄会显示黑色椭圆。没有看到控制台错误。

问题图片

代码:

(function () {
    var canvas = document.querySelector("canvas"),
        ctx = canvas.getContext("2d"),
        WIDTH = canvas.width,
        HEIGHT = canvas.height;

    // our ball object
    function Ball(radius, color) {
        this.radius = radius;
        this.color = color;
        this.x = 50; // start coordinates
        this.y = 50;
        this.velX = 0;
        this.velY = 0;
        this.accX = 0;
        this.accY = 0;
        this.gravity = 0;

        this.start = function (angle, velocity) {
            this.gravity = 9.8;
            this.angle = angle / 180 * Math.PI; // convert to radians
            this.velX = velocity * Math.cos(this.angle);
            this.velY = velocity * Math.sin(this.angle);
            this.accX = 0; // zero intially
            this.accY = 0; // TODO: set option for user to set himself
        };

        this.update = function () {
            this.velY -= this.gravity;
        };

        this.draw = function () {
            ctx.beginPath();
            ctx.arc(this.x, this.y, this.radius, 0, 2 * Math.PI);
            ctx.fillSyle = this.color;
            ctx.fill();
            ctx.closePath();
        }
    }

    // balls array
    var balls = [];

    document.querySelector("input[type='button']").onclick = function () {
        var color = gId("color").value,  // getElementById; defined in jsfiddle
            velocity = gId("velocity").value,
            angle = gId("angle").value,
            radius = gId("radius").value;

        var ball = new Ball(radius, color);
        ball.start(angle, velocity);
        balls.push(ball);
    };

    setInterval(function () {
        for (var i = 0, len = balls.length; i < len; i++) {
            ctx.clearRect(0, 0, WIDTH, HEIGHT);
            balls[i].draw();
            balls[i].update();
        }
    }, 1000 / 60); // 1000/x depicts x fps

我不知道为什么它不起作用。系统:最新版的Chrome / Firefox Windows 7。

任何帮助表示赞赏。请发表评论以获取更多信息。

Furqan Zafar

1)在画布元素上设置width和height属性,而不是应用CSS样式,即:

    <canvas width="400px" height="400px">You don't support canvas.</canvas>

2)将引力值除以60,因为每1/60秒调用一次更新函数,即:

    this.start = function (angle, velocity) {
        this.gravity = 9.8 / 60;
        this.angle = angle / 180 * Math.PI; // convert to radians
        this.velX = velocity * Math.cos(this.angle);
        this.velY = velocity * Math.sin(this.angle);
        this.accX = 0; // zero intially
        this.accY = 0; // TODO: set option for user to set himself
    };

3)将更新功能更改为:

    this.update = function () {
        this.velY += this.gravity;
        this.x += this.velX;
        this.y += this.velY;
    };

4)将ctx.clearRect方法移到for循环之外,否则您将只能看到一个动画球,即

setInterval(function () {
    ctx.clearRect(0, 0, WIDTH, HEIGHT);
    for (var i = 0, len = balls.length; i < len; i++) {            
        balls[i].draw();
        balls[i].update();
    }
}, 1000 / 60); // 1000/x depicts x fps

这里是更新的js小提琴:http : //jsfiddle.net/km6ozj6L/1/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

帆布弹跳球,显示一个椭圆形的黑球

来自分类Dev

如何制作一个圆形的椭圆形按钮?

来自分类Dev

我想用箭头将一个椭圆形的css形状变成椭圆形

来自分类Dev

我想用箭头将一个椭圆形的css形状变成椭圆形

来自分类Dev

如何创建一个椭圆形的UIView?

来自分类Dev

Python从4点创建一个椭圆形

来自分类Dev

帆布弹跳球

来自分类Dev

如何在css中制作一个椭圆形?

来自分类Dev

如何在Flutter中在屏幕顶部创建一个半椭圆形?

来自分类Dev

Android从canvis中删除一个椭圆形的部分

来自分类Dev

LWJGL Circle程序创建一个椭圆形的形状

来自分类Dev

当我分配一个 backgroundImage 时,我不能让 CircleAvatar 变成一个椭圆形

来自分类Dev

如何在android中的水平Linearlayout中显示两个椭圆形末端的Textview?

来自分类Dev

在Java中链接两个椭圆形

来自分类Dev

两个重叠的椭圆形-可见的文物

来自分类Dev

在OpenGL中创建椭圆形或椭圆形光源?

来自分类Dev

使用CSS创建一半垂直的椭圆形

来自分类Dev

矩形,椭圆形底部

来自分类Dev

CaptureElement为椭圆形

来自分类Dev

椭圆形气泡排序

来自分类Dev

如何填充椭圆形?

来自分类Dev

椭圆形的 RecyclerView 动画

来自分类Dev

Unity椭圆形绘制椭圆

来自分类Dev

opengl绘制椭圆形而不是圆形

来自分类Dev

圆形图像在Bootstrap 4中显示为椭圆形

来自分类Dev

Android圆圈背景变为椭圆形

来自分类Dev

CSS中的半椭圆形

来自分类Dev

形状计算算法(椭圆形)

来自分类Dev

创建椭圆形的弯曲边框