- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 12 年级的 OPP 作业。
目前我遇到一个问题,球偶尔会进入方 block 而不是反射。
这是我的代码:
主要如何检查球是否击中方 block :
public void theBall(){
//System.out.println(blocks.size());
if(!started){
balls.get(0).withPaddle(paddle.returnX());
}
if(started){
for(int i=0;i<balls.size();i++){
if(balls.get(i).returnX()>=0 && balls.get(i).returnX()<=800 && balls.get(i).returnY()>=0){
balls.get(i).move();
}
if(balls.get(i).returnX()+balls.get(i).returnDx()<= 0){
balls.get(i).collide(1);//collide with left wall
}
if(balls.get(i).returnX()+10+balls.get(i).returnDx() >= 800){
balls.get(i).collide(2);//collide with right wall
}
if(balls.get(i).returnY()-balls.get(i).returnDy() <= 0){
balls.get(i).collide(3);//collide with up wall
}
if(paddle.returnX() < balls.get(i).returnX() && balls.get(i).returnX()< paddle.returnX()+paddle.returnSize() && balls.get(i).returnY()-balls.get(i).returnDy() >= 545){//fix this && balls.get(i).returnY()-balls.get(i).returnDy() <= 560
balls.get(i).collidePaddle(balls.get(i).returnX()-paddle.returnX());//collide with paddle
//System.out.println(ball.returnDy());
}
for(int j=0;j<blocks.size();j++){
//blocks.get(j).getHit(balls.get(i));
if(balls.get(i).returnX()+10+balls.get(i).returnDx() >= blocks.get(j).returnX() && balls.get(i).returnX()+10+balls.get(i).returnDx() <= blocks.get(j).returnX()+5 && balls.get(i).returnY() >= blocks.get(j).returnY() && balls.get(i).returnY() < blocks.get(j).returnY()+50){
if(!blocks.get(j).returnHit()){
balls.get(i).collide(2);//collide with right wall (block's left)
blocks.get(j).getHit(balls.get(i));
System.out.println("boiboiboiboibo1");
}
}
if(balls.get(i).returnX()+balls.get(i).returnDx() <= blocks.get(j).returnX()+50 && balls.get(i).returnX()+balls.get(i).returnDx() >= blocks.get(j).returnX()+45 && balls.get(i).returnY() >= blocks.get(j).returnY() && balls.get(i).returnY() < blocks.get(j).returnY()+50){
if(!blocks.get(j).returnHit()){
balls.get(i).collide(1);//collide with left wall (block's right)
blocks.get(j).getHit(balls.get(i));
System.out.println("boiboiboiboibo2");
}
}
if(balls.get(i).returnX() >= blocks.get(j).returnX() && balls.get(i).returnX() < blocks.get(j).returnX()+50 && balls.get(i).returnY()-balls.get(i).returnDy() <= blocks.get(j).returnY()+50 && balls.get(i).returnY()-balls.get(i).returnDy() >= blocks.get(j).returnY()+45){
if(!blocks.get(j).returnHit()){
balls.get(i).collide(3);//collide with up wall (block's bottom)
blocks.get(j).getHit(balls.get(i));
System.out.println("boiboiboiboibo3");
}
}
if(balls.get(i).returnX() >= blocks.get(j).returnX() && balls.get(i).returnX() < blocks.get(j).returnX()+50 && balls.get(i).returnY()+10-balls.get(i).returnDy() >= blocks.get(j).returnY() && balls.get(i).returnY()+10-balls.get(i).returnDy() <= blocks.get(j).returnY()+5){
if(!blocks.get(j).returnHit()){
balls.get(i).collide(4);//collide with down wall (block's top)
blocks.get(j).getHit(balls.get(i));
System.out.println("boiboiboiboibo4");
}
}
}
for(int j=0;j<specialBlocks.size();j++){
if(balls.get(i).returnX()>=specialBlocks.get(j).returnX() && balls.get(i).returnX()<=specialBlocks.get(j).returnX()+100 && balls.get(i).returnY()>=specialBlocks.get(j).returnY() && balls.get(i).returnY()<=specialBlocks.get(j).returnY()+100){
oneAndThreeBalls(i, j);
balls.get(i).changeType(j);
}
}
}
}
}
球如何反射:
public void collide(int collideWith){
if(collideWith==1){//collide with left wall
if(90<direction && direction<180){
direction = 180-direction;
}
if(180<direction && direction<270){
direction = 540-direction;
}
}
if(collideWith==2){//collide with right wall
if(0<direction && direction<90){
direction = 180-direction;
}
if(270<direction && direction<360){
direction = 540-direction;
}
}
if(collideWith==3){//collide with up wall
direction = 360-direction;
}
if(collideWith==4){//collide with down wall
direction = 360-direction;
}
}
我很清楚该错误是由于边界的双重检查造成的。当球位于方 block 的角落时,就会发生这种情况。但这是我能想到的检查球的位置是否反射(reflect)的唯一方法。我有什么想法可以修复这个错误吗?谢谢。
最佳答案
为什么不这样做:
1) 弹跳后,您停止检查该球的碰撞,直到游戏的下一个周期。这样球每次跳动只能弹跳一次。
2) 与方 block 碰撞并弹开后,您会忽略该特定方 block 与球之间的碰撞,直到球不与方 block 重叠为止。这样,球就不会在相同的撞击下从木 block 上虚假地反弹两次。
顺便说一句,您有很多复制和粘贴的代码,只有数字等方面的细微变化。如果您找到一种方法来重述它,即使用稍微不同的参数不断调用的方法,您的代码将变得更加整洁,问题的基本对称性也将更加明显。
关于java - 需要有关 Breakout 游戏碰撞错误的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15059856/
我在网站的首页上有一个 iframe。 iframe 加载一个 .php 页面,该页面具有使用 jQuery 工具选项卡构建的旋转器。在第一个选项卡上,我使用 jQuery Tools Overlay
我正在介绍在线编程。但是,我被困在一项任务上。 作业是编写一个闯关游戏。我已经成功编写了 97% 的游戏。然而,游戏在移除所有积木之前停止。有时还剩 4 block 积木,有时是 11 block 。
breakOut 很好,但太冗长了: List(1, 2, 3).map{i => (i * 2, i / 2.0, i.toString)}(breakOut) : Array[(Int, Doub
我正在制作 Breakout 克隆游戏,但在 Racket 碰撞方面遇到了一些麻烦。我有一个矩形代表球和桨,当它们相交时,代表球速度的 Y 向量被取反(如下所示)。一切正常。问题是当桨向右移动时,我希
我正在用 JavaScript 编写一个突破游戏,并且遇到了 Racket 碰撞检测的问题。 在运行程序时,球与 Racket 的所有碰撞都没有问题,直到它第一次未命中。此时程序将球放回中心并再次将其
这是 12 年级的 OPP 作业。 目前我遇到一个问题,球偶尔会进入方 block 而不是反射。 这是我的代码: 主要如何检查球是否击中方 block : public void theBall(){
好的,我有这个永不终止的游戏循环 -- public void run() { setup(); addMouseListeners(); int Turns = NTURNS
我正在尝试使用以下 CSS 将 breakout div 居中放置在我的页面底部: #footer { clear: both; position: absolute; bottom: 0; left
如何在 this hidden html game 中作弊/自动移动 Racket ?看起来像? 有一个 ● 和一个 当移动鼠标时,桨会水平移动。如何将球的运动与 Racket 联系起来? 这个问题
This SO answer描述如何 scala.collection.breakOut可用于防止创建浪费的中间集合。例如,这里我们创建一个中间 Seq[(String,String)] : val
我正在尝试按照 DeepMind 关于 Q-learning 的论文进行游戏突破,但到目前为止,性能没有提高,即它根本没有学习任何东西。我没有体验重播,而是在运行游戏,保存一些数据和训练,然后再次运行
对于 CS 入门类(class),我正在尝试用 Java 克隆“Breakout”。游戏已经完成 99%,所以我想我应该添加一些额外内容。 我想添加的一件事是使用空格键暂停和恢复的功能。我添加了一个
我正在为我的 AP 计算机科学类(class)制作游戏 Breakout。我已经完成了大部分,但我不知道如何使用键盘上的箭头键左右移动桨。我能得到一些帮助吗?我会很感激。 这是我目前所拥有的: 主类:
在 OpenAI 健身房环境中训练时,我认为环境有时会“停止”。对于连续的许多帧,没有球可见/停止产卵。 这是健身房环境的错误吗?这是 Breakout-v0 游戏的一部分吗? 我还想知道 Break
大家好,我已经学习 Java 几周了,并决定制作我自己的 Breakout 版本。除了根据 Racket (GRect) 的速度修改球 (GOval) 速度的方法之外,游戏运行良好。不管怎样,方法是这
我的目标是让球以 Racket 为中心,即使球半径的值在游戏的 future 版本中发生变化。我唯一的问题是执行正确的数学公式为游戏球的 x 坐标。我的 y 坐标公式运行良好。 我不需要正确答案。我只
假设我有这样的数据: scala> case class Foo(a: Int, b: Int) defined class Foo scala> val data: List[Foo] = Foo(
我一直在尝试让 Breakout 在 Racket 中工作,到目前为止,球从桨上弹起(桨由鼠标控制)并且砖 block 存在 完整代码如下: (require 2htdp/image) (requir
这是我关于 SO 的第一篇文章! 我已经独自学习了几周斯坦福大学的“编程方法论”类(class),该类(class)介绍了如何使用 Java 进行编程。到目前为止,我一直在毫无困难地完成所有程序,以最
我已经得到了当球与 block 碰撞时会删除 block 的部分,但我也想知道球是否击中 block 的顶部或底部或左侧或右侧并相应地弹跳。我已经尝试过,但效果不太好。它只是吓得跳来跳去。我已从下面的
我是一名优秀的程序员,十分优秀!