Java 如何让精灵在屏幕边缘反弹?

Java 如何让精灵在屏幕边缘反弹?,java,velocity,2d-games,Java,Velocity,2d Games,我有一个测试程序,用来建立一个游戏的开始 我对if语句中的velocity属性有问题,这些语句本应创建屏幕精灵的反弹效果,但我似乎无法获得正确的组合。这项工作已经做了很长时间,似乎没有任何进展。任何帮助都将不胜感激 另一方面,在elseif方法中,有一个名为getWidth和getHeight的属性,它应该获得屏幕的高度和宽度。但我不确定它是否会。如果需要,我可以附加该类。但在下面,我将添加我尝试创建屏幕边缘“反弹”效果的方法 public void checkScreenEdge(Sprite

我有一个测试程序,用来建立一个游戏的开始

我对if语句中的velocity属性有问题,这些语句本应创建屏幕精灵的反弹效果,但我似乎无法获得正确的组合。这项工作已经做了很长时间,似乎没有任何进展。任何帮助都将不胜感激

另一方面,在elseif方法中,有一个名为getWidth和getHeight的属性,它应该获得屏幕的高度和宽度。但我不确定它是否会。如果需要,我可以附加该类。但在下面,我将添加我尝试创建屏幕边缘“反弹”效果的方法

public void checkScreenEdge(Sprite s){
    if (s.getX() > getWidth()){

    }
    else if (s.getX() + s.getWidth() >= getWidth());
    {

    }

    if (s.getY() > getHeight()) {

    }
    else if (s.getY() + s.getHeight() >= getHeight())
    {

    }
}

如果要使用deltaX和deltaY值(或速度值)来决定移动的方向,只需在适当的位置将值从正值更改为负值,或从负值更改为正值。例如:

if (s.getX() <= 0) {
   s.setDeltaX(Math.abs(s.getDeltaX());
} else if (s.getX() + s.getWidth() >= MAX) {
   s.setDeltaX(-Math.abs(s.getDeltaX());
}
if(s.getX()=MAX){
s、 setDeltaX(-Math.abs(s.getDeltaX());
}
我觉得使用绝对值而不是直接交换deltaX值很重要,因为如果您这样做:

if (s.getX() <= 0) {
    s.setDeltaX(-s.getDeltaX());
}

if(s.getX()
x<0 | | x+width>width
不是更合适吗?那么你可以只修改相反方向的速度
xVelocity*=-1
?希望你是以每秒预定义的速率调用你的方法。@Abhijith:但计算实时切片总是最好的当你说>=Max时,你这么说是什么意思?max的值是多少?@CaptainCode:这是由你决定和定义的——模型的右边框。你能不能不把它指定为屏幕的大小?我有一个类,它自动包含屏幕的大小,所以我可以正确使用它?或者我需要创建一个新的variable@CaptainCode:如果你需要的话,你可以,但是这种决策是在模型代码中做出的,而不是视图代码,因为后者的功能只是可视化模型的状态。