首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java GUI -当对象位于面板的右侧时,为什么图形会出现毛刺?

Java GUI -当对象位于面板的右侧时,为什么图形会出现毛刺?
EN

Stack Overflow用户
提问于 2021-03-17 10:24:37
回答 1查看 25关注 0票数 0

这是程序中不能正常运行的部分。该程序应该生成一堆圆圈,并让它们在周围移动并从侧面反弹。当它从左边的大小反弹时,边(R)应该减小。当它从右侧反弹时,它应该会增加。当它击中左侧时,它工作得很好,但当它击中右侧时,它就会变得非常大,非常快,然后漂浮而不反弹。你能帮我解决这个问题吗?谢谢

代码语言:javascript
复制
public void myMove() {
        x+=dx;
        
        if(x<=0) {
            x-=dx;
            dx*=-1;
            r = (int)(r*1.1);
        }
        if(x>=500-(r*2)) {
            x-=dx;
            dx*=-1;
            r = (int)(r*0.7);
            
        }
        y+=dy;
        
        if(y<=0) {
            y-=dy;
            dy*=-1;
            dy = (int)(dy*1.5);
            dx = (int)(dx*1.5);
            
        }
        if(y>=500-(r*2)) {
            y-=dy;
            dy*=-1;
            dy = (int)(dy*0.7);
            dx = (int)(dx*0.7);
        }
            
    }
EN

回答 1

Stack Overflow用户

发布于 2021-03-17 10:52:26

它看起来是这样的,当你的程序检查它是否撞到了正确的墙,它发现了一个碰撞,它再次更新了你的球的位置,然后改变了侧面的大小(r)。当它在下一次迭代中再次检查时,它仍然注册它正在冲突,因为大小已经改变,但是圆的位置没有改变到足以停止注册冲突。试着将你的速度更新dx*=-1移到你的移动d-=dx的上方,并且首先改变墙的大小。下面是我的代码:

代码语言:javascript
复制
if(x>=500-(r*2)) {
   r = (int)(r*0.7);
   dx*=-1;
   d-=dx;
}

这应该是有效的,但是如果它不起作用,请让我更明确地知道r变量是什么。无论哪种方式,更新后的代码都应该没问题,但我可能假设变量是错误的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66666133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档