gpt4 book ai didi

java - 如何从另一个类访问对象变量?

转载 作者:太空宇宙 更新时间:2023-11-04 06:35:38 24 4
gpt4 key购买 nike

我在网上查了一下,有些东西有帮助,但我仍然没有让这个东西发挥作用。我正在制作一个简单的乒乓球游戏,但我想要它,所以我的所有代码都已正确设置。所以我有一个针对player1 Racket 、电脑 Racket 、球、主屏幕以及比赛屏幕的类。因此,例如,我的player1Paddle类将具有该桨的所有运动,计算机桨类(player2)将具有该桨的所有运动,依此类推。但是,当涉及到对计算机桨的简单 AI 进行编码时(基本上从左到右跟随球),我无法访问球的位置

if(player2Pong.position.x > ballPong.position.x)

它带来了一个错误。现在我已经实例化了球类并且它可以工作,但我基本上已经制作了另一个球,但运动不存在。以下是尝试提供帮助的部分代码。我知道有很多代码,而且可能有一些是不需要的。在我的 playScreen 上我调用player2movement -

player2Pong.Player2Movement();

这是大部分的player2pong类。

 public class Player2Pong {
public Vector2 position;
String textureLoc;
Texture Player2Texture;
float stateTime;
Rectangle player2Bounds;
String movement;
int speed = 2;
int playerXVector = 5;
SpriteBatch batch;

//PlayerPong playerpong;
Player2Pong player2pong;

Ball ballPong;

public int paddle_player2_Width = 80;
public int paddle_player2_Height = 10;

//PlayerPong player;

public Player2Pong(Vector2 position, Ball ball){

Player2Texture = new Texture(Gdx.files.internal(("paddle_player2.png")));
this.position = position;

player2Bounds = new Rectangle(position.x,position.y,paddle_player2_Width, paddle_player2_Height);
//this.player2pong = player2pong;
this.ballPong = ball;

}

public void update(){

}

public void Player2Movement(){

player2pong = new Player2Pong(new Vector2(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() - (Gdx.graphics.getHeight()/8)), ballPong);

System.out.println(player2pong.position.x);

if(player2pong.position.x > ballPong.getPosition().x){
System.out.println("right");
player2pong.position.x -= playerXVector;
}

else if(player2pong.position.x < ballPong.getPosition().x){
System.out.println("right");
player2pong.position.x += playerXVector;
}

if(player2pong.position.x > Gdx.graphics.getWidth() - player2pong.getPaddle_player2_Width()-5){
player2pong.position.x -= playerXVector;
}

if(player2pong.getPosition().x < 3){
player2pong.position.x += playerXVector;
}

}


public void draw(SpriteBatch batch){

batch.draw(Player2Texture, position.x, position.y, paddle_player2_Width, paddle_player2_Height);
}

这是 playScreen 类的大部分内容

  public class PlayScreenPong implements Screen{

private static final Color WHITE = null;
SpriteBatch batch;

PlayerPong playerPong;
Player2Pong player2Pong;

InputProcessor inputProcessor;
Game game;
Ball ballPong;
Texture paddle_player1, paddle_player2;
ArrayList<Ball> balls;
ArrayList<Player2Pong> player2;

Iterator<Ball> ballsIterator;
Vector2 position;
ShapeRenderer borderSR, ballSR;
Sound sound;
boolean rectangles = true;
Stage PlayScreenStage;
Label label;
LabelStyle style;
BitmapFont font;

int playerXVector = 10;

int player1Score = 0;
int player2Score = 0;

public PlayScreenPong(Game game){
this.game = game;

}

@Override
public void render(float delta) {
Gdx.gl.glClearColor(0,0,0,0);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

playerPong.update();
//player2Pong.update();

borderSR.begin(ShapeType.Line);
borderSR.rect(1, 1, Gdx.graphics.getWidth()-5, Gdx.graphics.getHeight()-4);
borderSR.setColor(1,1,1,1);
borderSR.end();
batch.begin();

ballsIterator = balls.iterator();
while(ballsIterator.hasNext()){
Ball cur = ballsIterator.next();
cur.update();
cur.draw(batch);
}
batch.draw(playerPong.getPlayerTexture(), playerPong.getPosition().x, playerPong.getPosition().y, playerPong.paddle_player1_Width, playerPong.paddle_player1_Height);
player2Pong.draw(batch);

//batch.draw(player2Pong.getPlayer2Texture(), player2Pong.getPosition().x, player2Pong.getPosition().y, player2Pong.paddle_player2_Width, player2Pong.paddle_player2_Height);
batch.end();
score();


PlayScreenStage.act();
PlayScreenStage.draw();

if(rectangles == true){
ballPong.drawRectangle();
}
player2Pong.Player2Movement();

}

@Override
public void show() {

batch = new SpriteBatch();
paddle_player1 = new Texture(Gdx.files.internal("paddle_player1.png"));
paddle_player2 = new Texture(Gdx.files.internal("paddle_player2.png"));
borderSR = new ShapeRenderer();

balls = new ArrayList<Ball>();
player2 = new ArrayList<Player2Pong>();

if(Gdx.files.local("paddle_player1.dat").exists()){
try {
playerPong = new PlayerPong(new Vector2(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 8), "paddle_player1.png");
playerPong.setPosition(PlayerPong.readPlayer());
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("File exists, reading file");

}else{
playerPong = new PlayerPong(new Vector2(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() / 8),"paddle_player1.png");
try {
PlayerPong.savePlayer(playerPong);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("Player doesnt exist, creating and saving player");
}

// player2Pong = new Player2Pong(new Vector2(Gdx.graphics.getWidth() / 2, Gdx.graphics.getHeight() - (Gdx.graphics.getHeight()/8)), playerPong);
// player2.add(player2Pong);

ballPong = new Ball(new Vector2(Gdx.graphics.getWidth()/2,Gdx.graphics.getHeight()/2), playerPong);
balls.add(ballPong);
}

public void score(){

PlayScreenStage = new Stage();
font = new BitmapFont(Gdx.files.internal("font.fnt"), false);
style = new LabelStyle(font, Color.WHITE);
label = new Label("Player 1: " + player1Score + " : " + player2Score + " :Player 2", style);
label.setPosition(Gdx.graphics.getWidth()/2 - label.getWidth()/2, Gdx.graphics.getHeight()/25);
label.setFontScale((float) 0.8);

PlayScreenStage.addActor(label);
Gdx.input.setInputProcessor(PlayScreenStage);
batch = new SpriteBatch();
//System.out.println(ballPong.getPosition().y);

//-------------------------------------if someone scores
if(ballPong.getPosition().y< 1){
player2Score = player2Score +1;
//oppositionScore +=1;
System.out.println("goal");
//ballPong.reset();
}

if(ballPong.getPosition().y > Gdx.graphics.getHeight()-1 -ballPong.getBallSizeY()){
player1Score = player1Score + 1;
//ballPong.reset();
}

}

正如我之前所说,它有点啰嗦,但我想做的就是对player2pong类中AI的运动、ball类中球的运动以及player类中玩家的运动进行排序,然后调用playscreen类中render或show方法中的方法。随意问任何问题。我知道这是一个简单的答案,但我是新的:(必须从某个地方开始

最佳答案

好吧,我的想法可能是错的,但值得一试。

首先,您不需要每次调用 PlayerMovement() 函数时都创建一个新的 Player2pong 对象,您已经有了一个:P

其次,您永远不会为 player2Pong 属性分配任何内容。因此,当您尝试对其调用 draw() 时,没有任何东西可以调用它!:P

关于java - 如何从另一个类访问对象变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25434353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com