- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 Java 还很陌生,需要一些帮助。我已经创建了 Pong 游戏(使用 Eclipse),并且在大多数情况下,它运行得很好。然而,碰撞检测有些不对劲。球从人类控制的 Racket 上反弹得很好,但总是直接穿过人工智能控制的 Racket ,我一辈子都无法弄清楚我的代码出了什么问题。代码如下:
主课“网球”:
package PongV2;
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Tennis extends Applet implements Runnable, KeyListener{
final int WIDTH = 700, HEIGHT = 500;
Thread thread;
HumanPaddle p1;
AIPaddle p2;
Ball b1;
boolean gameStarted;
Graphics gfx;
Image img;
public void init(){
this.resize(WIDTH, HEIGHT);
gameStarted = false;
this.addKeyListener(this);
p1 = new HumanPaddle(1);
b1 = new Ball();
p2 = new AIPaddle(2, b1);
img = createImage(WIDTH, HEIGHT);
gfx = img.getGraphics();
thread = new Thread(this);
thread.start();
}
public void paint(Graphics g){
gfx.setColor(Color.black);
gfx.fillRect(0, 0, WIDTH, HEIGHT);
if(b1.getX() < -10 || b1.getX() > 710){
gfx.setColor(Color.red);
gfx.drawString("Game Over", 350, 250);
}
else{
p1.draw(gfx);
b1.draw(gfx);
p2.draw(gfx);
}
if(!gameStarted) {
gfx.setColor(Color.white);
gfx.drawString("Pong", 343, 100);
gfx.drawString("Press Enter to Begin...", 295, 130);
}
g.drawImage(img, 0, 0, this);
}
public void update(Graphics g){
paint(g);
}
public void run() {
for(;;){
if(gameStarted) {
p1.move();
p2.move();
b1.move();
b1.checkPaddleCollision(p1, p2);
}
repaint();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP) {
p1.setUpAccel(true);
} else if(e.getKeyCode() == KeyEvent.VK_DOWN){
p1.setDownAccel(true);
} else if(e.getKeyCode() == KeyEvent.VK_ENTER){
gameStarted = true;
}
}
public void keyReleased(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_UP) {
p1.setUpAccel(false);
} else if(e.getKeyCode() == KeyEvent.VK_DOWN){
p1.setDownAccel(false);
}
}
public void keyTyped(KeyEvent arg0) {
}
}
如果有人需要的话,还可以看看“AIPaddle”类:
package PongV2;
import java.awt.Color;
import java.awt.Graphics;
public class AIPaddle implements Paddle{
double y, yVel;
boolean upAccel, downAccel;
final double GRAVITY = 0.94;
int player, x;
Ball b1;
public AIPaddle(int player, Ball b){
upAccel = false; downAccel = false;
b1 = b;
y = 210; yVel = 0;
if(player == 1)
x = 20;
else
x = 660;
}
public void draw(Graphics g) {
g.setColor(Color.white);
g.fillRect(x, (int)y, 20, 80);
}
public void move() {
y = b1.getY() -40;
if(y < 0)
y = 0;
if(y > 420)
y = 420;
}
public int getY() {
return (int)y;
}
}
“球”类:
package PongV2;
import java.awt.Color;
import java.awt.Graphics;
public class Ball {
double xVel, yVel, x, y;
public Ball(){
x = 350;
y = 250;
xVel = getRandomSpeed() * getRandomDirection();
yVel = getRandomSpeed() * getRandomDirection();
}
public double getRandomSpeed(){
return(Math.random() *3 + 2);
}
public int getRandomDirection(){
int rand = (int)(Math.random() * 2);
if(rand == 1)
return 1;
else
return -1;
}
public void draw(Graphics g){
g.setColor(Color.white);
g.fillOval((int)x-10, (int)y-10, 20, 20);
}
public void checkPaddleCollision(Paddle p1, Paddle p2){
if (x <= 50){
if(y >= p1.getY() && y <= p1.getY() + 80){
xVel = -xVel;
}
else if(x >= 650){
if(y >= p2.getY() && y <= p2.getY() + 80)
xVel = -xVel;
}
}
}
public void move(){
x += xVel;
y += yVel;
if(y < 10)
yVel = -yVel;
if(y > 490)
yVel = -yVel;
}
public int getX(){
return (int)x;
}
public int getY(){
return (int)y;
}
}
有人可以建议我的代码哪里需要更正吗?谢谢。
最佳答案
它是 checkPaddleCollisionMethod 中的 if 语句。你现在就有这个了。
if(...) {
if(...) {
}
else if(...) {
if(...) {
}
}
}
else if 与第二个 if 并行,而不是与第一个 if 并行。你想要一个更像这样的结构。
if(...) {
if(...) {
}
}
else if(...) {
if(...) {
}
}
关于Java Pong 游戏碰撞检测问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39070171/
我使用 Xcode 和 swift 5 构建了一个应用程序。 每次我点击“简单”、“中等”、“困难”或“2 人”按钮时,我都会收到错误消息: Could not cast value of type
所以我和我的搭档正在尝试制作一个玩家对电脑的乒乓球游戏,但我们就是不知道如何让电脑输。 我们已经完成了基本的工作,它运行良好,但计算机永远不会丢失。我们还尝试使用 sleep 来减慢计算机的速度,但是
我应该如何设计“适当的” OO Pong? 正确的想法是可以更改任何元素:球,球场和 Racket 的形状,增加了障碍,甚至是“助力”,例如“可以将球粘在 Racket 上”。 目前,还有两个紧迫的问
我正在尝试用 Java 制作 Pong 游戏,但在球从 Racket 上弹起时遇到了一些问题。 我有两个桨:左桨1,右桨2。 我的想法如下:ball_Y应该在 Racket 的高度之间,ball_X触
我对 Java 还很陌生,需要一些帮助。我已经创建了 Pong 游戏(使用 Eclipse),并且在大多数情况下,它运行得很好。然而,碰撞检测有些不对劲。球从人类控制的 Racket 上反弹得很好,但
我正在打乒乓球,我已经将球的 x 坐标设置为在它碰到 Racket 时立即反转,并在它没有击中 Racket 时停止。此代码在“大部分”时间都有效,但“有时”球会在没有明显原因的情况下一击中 Rack
我正在创建一个 JS Pong 游戏,但 Pong 游戏中的球在几秒钟后开始滞后。我尝试停止动画帧,优化代码以获得更好的性能并重写球的代码,但没有任何效果。有人可以帮我吗? HTML(无 CSS)
我很困惑为什么我的记分板没有在屏幕上更新。分数正在增加(我用调试器检查过,球也正在居中)。但记分牌根本不更新,它不断显示“0:0” 乒乓球类 package com.dheraxysgames.pon
最近我编写了一个pygame 'Pong',我还没有完成它,因为桨还不能移动。 但是,我在这里遇到了一个问题。因为我想要得到的分数等于球击中 window 边缘的次数。对于我的程序,当球撞到墙壁时,得
嗨,我写了这个简单的碰撞检测和弹跳算法,但是碰撞检测到 y 就好像它是 x 轴一样 bool Ball::DetectCollision(Paddle p) { if(GetPosition().y
我正在用 Python 制作经典的 Pong,但我需要帮助。 对于/在这个游戏中,我想计算球的轨迹,因此对于给定的开始点(在左桨上弹跳)和角度(绿色物体),我想计算终点(蓝色 X)。这一切都是为了将
我有一个 UIImageView,其中加载了一个 png 图像序列。 我的问题是 - 你知道有什么方法可以“乒乓”动画序列吗?这样就从 1-24 向前播放,然后从 24-1 向后播放并循环。 (技术上
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我正在用java制作乒乓球,但敌人的AI没有动。它应该向球移动的方向移动。请问有人可以帮助我吗? 主类: import javax.swing.*; public class Main extends
我正在用java制作一个乒乓球类型的游戏,我试图让球从墙上弹开,但每当球撞到球时,它就会停止,它不会从墙上反射出来,我看不到找出原因。 处理球运动的球类 public class Ball { pri
我正在为我的 Pong 克隆编写一些困难,我写这些是为了熟悉 SFML 和 Xcode。对于最难的难度,我想创建一个人工智能关卡,让计算机立即知道球会去哪里。所以,如果我有 xVelocity 和 y
我是 HTML 5 + Canvas 游戏开发新手。试图在我的 Pong 游戏中为球制作动画。这是我的 code .相关片段: 增加球的速度: Ball.prototype.update = func
好吧,我为此搜索了很多,但我能找到的只是人们说的像 pi * direction,方向是我假设的球进入的角度。但我的问题是,我不知道我是如何得到球进入的角度的,所以我做不到这些。如果有人可以解释我将如
试图在 java 中制作乒乓球但不能同时移动两个 Racket 。您可以移动其中一个,但不能同时移动两者。我是否需要创建具有 2 个不同面板的 2 个线程? 这里是我指定关键事件的地方 public
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我是一名优秀的程序员,十分优秀!