我目前正在通过斯坦福大学的编程方法论(2008)课程学习Java。我正在试图创建游戏突破,并试图目前动画桨,这是一个GRect类型的对象。这是我的代码:
// moves paddle via keyboard
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_RIGHT && paddle.getX() < getWidth() - paddle.getWidth()) {
paddle.move(5, 0);
}
if (key == KeyEvent.VK_LEFT && paddle.getX() > 0) {
paddle.move(-5, 0);
}
}
//moves paddle via mouse
public void mouseMoved(MouseEvent e) {
while (e.getX() > paddle.getX() + PADDLE_WIDTH/2 && paddle.getX() < getWidth() - PADDLE_WIDTH) {
paddle.move(1, 0);
}
while (e.getX() < paddle.getX() + PADDLE_WIDTH/2 && paddle.getX() > 0) {
paddle.move(-1, 0);
}
问题是,如果我用鼠标移动拨片,它会很好地跟随,比我用键盘移动它要流畅得多。改变移动()方法中的值只会改变拨片移动的速度。
我尝试过谷歌搜索,人们做的一件事是逐渐增加和减少划桨移动的速度,但我不确定如何通过这个库正确实现这一点。以下是我的尝试:
private double acceleration(double finalSpeed) {
if (finalSpeed > initialSpeed) {
initialSpeed += delta;
} else if (finalSpeed < initialSpeed) {
initialSpeed -= delta;
}
return initialSpeed;
}
private double initialSpeed = 0;
private double delta = 0.5;
在这之后,我就开始划桨了。移动(加速度(5),0)而不是划桨。移动(5,0)。我还添加了KeyRelease方法,将速度设置为初始值:
public void keyReleased(KeyEvent e) {
int key = e.getKeyCode();
if (key == KeyEvent.VK_RIGHT || key == KeyEvent.VK_LEFT) {
initialSpeed = 0;
}
然而,当我在左右箭头键之间切换时,拨片的移动没有响应。它有大约0.5秒的延迟来开始向另一个方向移动,我花了一整天的时间试图找出解决方案,但没有成功。请给我任何提示,谢谢!
线程似乎有一些问题(我不完全理解)。这样做有帮助:
我没有直接用侦听器移动拨片,而是创建了两个布尔值:left_key_down
和right_key_down
,如果按下相应的键,将它们设置为true。之后,我使用:if(left_key_down)mobile(-5,0)
移动拨片,类似地使用右运动。这导致了平滑的运动。
问题内容: 递归是一种“分而治之”的样式,它在变小的同时会拆分(Tree数据结构),如果发现违规,我希望它完全中断,这意味着中断所有递归路径并返回true。这可能吗? 问题答案: 您可以返回错误代码,或修改一些全局变量,以便每个递归实例都知道可以“杀死自己”。 某种东西。
问题内容: 在我的代码中,我有一个for循环,迭代一个代码方法,直到满足for条件为止。 反正有没有打破这个for循环? 因此,如果我们看下面的代码,如果我们想在达到“ 15”时打破这个for循环,该怎么办? 我尝试了以下无济于事: 我尝试了一个循环: 我可以实现我想要的唯一方法是打破for循环,我不能暂时将其替换,如果要使用if语句。 编辑: 仅作为示例提供了此代码,这不是我试图将其实现的代码。
我正在创建一个突破游戏,我之前在这里问了一个问题,但没有提出解决方案。我有一个简单的物理过程来反转球与桨碰撞时的速度。但我需要实现一个更先进的物理系统,例如,当球击中桨的左侧和右侧时,等等。。。但我该如何计算碰撞后球的方向呢?突破的标准是在与球拍左侧碰撞时将球指向左侧,如果碰撞是向右的,则指向右侧,等等。。。 我如何计算在哪里击球?我有很多变量可以使用,比如桨叶的各个方面(宽度、高度、X位置)、球
问题内容: 我有一个像这样的嵌套循环构造: 现在如何摆脱两个循环?我看过类似的问题,但没有一个是Java特有的。我无法应用这些解决方案,因为大多数使用的gotos。 我不想将内部循环使用其他方法。 我不想重新运行循环。中断时,我完成了循环块的执行。 问题答案: 像其他答复者一样,我绝对希望将循环放入另一种方法中,此时你可以返回以完全停止迭代。该答案仅显示了如何满足问题中的要求。 你可以将break
问题内容: 我的Java应用程序中有一个JFrame,其中包含一个在运行时创建的图形对象。问题是,在滚动大号图形时,滚动速度会变慢,并且滚动条无法平滑移动。请注意,我正在使用对象,并且正在执行滚动操作。 有什么办法可以使的滚动动作变得平滑。 这是代码的一部分 问题答案: 为什么不将图形放在(大的)图形中并在滚动窗格的标签中显示?像这样的东西(动画,5000x5000px): 它试图每秒绘制200线
问题内容: Java中的关键字可用于中断循环或switch语句。有什么可以用来打破方法的吗? 问题答案: 使用关键字退出方法。 从上面链接到的Java教程: 任何声明为void的方法都不会返回值。它不需要包含return语句,但是可以这样做。在这种情况下,可以使用return语句从控制流块中分支出来并退出该方法,其用法如下: