【问题标题】:How to make an ellipse move up and down on processing如何使椭圆在处理时上下移动
【发布时间】:2016-07-11 08:10:08
【问题描述】:

我想让一个椭圆上下移动 那么,你能告诉我如何让椭圆上下移动吗?

【问题讨论】:

  • 这样,float x =0;整数目录=1;无效设置(){大小(500,300);背景(50); } 无效绘制() { 背景(50);椭圆(x+30, 30,30,30); x = x+(3*dir); if ((x> width-30) ||(x
  • 您使用哪种编程语言?爪哇? C?您编写的代码如何不符合您的预期?
  • 我正在使用Java处理

标签: processing


【解决方案1】:

第 1 步:将场景的状态存储在一些变量中。对你来说,这可能只是一个 circleY 变量。

float circleY = 50;

第 2 步:使用该变量来绘制场景。

ellipse(50, circleY, 10, 10);

第 3 步:随着时间的推移修改该变量以改变场景。

circleY++;

第 4 步:添加检查以确保您的变量不会超出范围。

if(circleY > height){
  circleY = 0;
}

把它们放在一起,它看起来像这样:

float circleY = 50;

void draw() {
  background(0);
  ellipse(50, circleY, 10, 10); 
  circleY++;
  if (circleY > height) {
    circleY = 0;
  }
}

当然,这只是一个例子。您必须添加额外的逻辑来切换方向,而不是传送回屏幕顶部。您可以使用directionY 变量,当圆圈到达屏幕顶部或底部时,您会切换该变量。

但基本原理是相同的:使用变量来存储您的状态,随着时间的推移更改这些变量,并使用这些变量绘制您的场景。

我建议您尝试一下,如果遇到困难,请在新问题中发布MCVE。祝你好运。

【讨论】:

    【解决方案2】:

    尝试使用 sin 或 cosine 函数使圆上下摆动!

    float angle = 0;
    
    public void draw() {
        if (angle > 359) {
            angle = 0;
        }
        ellipse(0, sin(radians(angle)) * height, 20, 20);
        angle++;
    }
    

    【讨论】:

    • 如果你想去掉那个angle变量,你也可以改用frameRate % 360
    • 只有当你的 frameRate 是 360 时才有效,它不应该是。您只能从带有 sin 或 cos 的完整 360 度角循环中获得完整的上下振荡。
    • 此外,您的答案中的解决方案只会使圆圈向下移动,而不是像提问者指定的那样上下移动。为此目的使用方向变量太复杂了。
    • 哎呀,这是一个类型:应该是 **frameCount%360,而不是 frameRate。你的程序变成了一行代码:ellipse(0, sin(radians(frameCount%360)) * height, 20, 20);
    • 哦,是的,frameCount 可以工作,这是一个不错的解决方案!是的,我知道你来自哪里。
    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多