gpt4 book ai didi

java - 是否可以访问在方法内部创建的对象?

转载 作者:行者123 更新时间:2023-12-02 09:27:17 25 4
gpt4 key购买 nike

我正在为我的游戏设计和开发类(class)制作期末项目。我有一种方法可以为角色创建类对象,并为代表敌人角色创建空间几何图形。

敌人角色已创建,但我无法访问在该方法中创建的对象(仅几何图形)。

这是创建敌人的方法:

/*
Method to create an enemy model.
*/
protected Spatial makeEnemy(String t, float x, float y, float z) {

Character emy = new Character(t);

// load a character from jme3test-test-data
Spatial enemy = assetManager.loadModel(emy.getLocation());
if (t=="ogre") {
enemy.scale(4.0f);
} else {
enemy.scale(1.0f);
}

enemy.setLocalTranslation(x, y, z);

//add physics
enemy_phy = new RigidBodyControl(2f);
enemy.addControl(enemy_phy);
bulletAppState.getPhysicsSpace().add(enemy_phy);

//add a light to make the model visible
DirectionalLight sun = new DirectionalLight();
sun.setDirection(new Vector3f(-0.1f, -0.7f, 1.0f));
enemy.addLight(sun);
enemy.rotate(0.0f, 3.0f, 0.0f);
return enemy;
}//end makeEnemy

字符类如下:

public class Character {

private String modelLocation; //the location of the model
private int hitPoints;
private int atk;
private int score;

Character() {
modelLocation = "Models/Ninja/Ninja.mesh.xml";//makes the ninja the default character
hitPoints = 10;
atk = 1;
score = 0;
}//end no argument constructor

/*
This will be the constructor used primarily for
creating enemy characters.
*/
Character(String s){
if(s=="ogre"){
modelLocation = "Models/Sinbad.j3o";
hitPoints = 5;
atk = 1;
score= 0;
} else {
modelLocation = "Models/Oto/Oto.mesh.xml";
hitPoints = 10;
atk = 1;
score = 0;
}
}//end constructor

/*
This constructor will be used for
creating the player character.
*/
Character(String s, int h, int a){
modelLocation = s;
hitPoints = h;
atk = a;
score= 0;//score always starts at zero
}//end constructor

/*
Getter Methods
*/
public String getLocation() {
return modelLocation;
}//end getLocation
public int getHitPoints() {
return hitPoints;
}//end getHitPoints
public int getAtk() {
return atk;
}//end getAtk
public int getScore() {
return score;
}//end getScore

/*
Setter methods
*/
public void setHitPoints(int n) {
hitPoints = n;
}//end setHitPoints
public void setAtk(int n) {
atk = n;
}//end setAtk
public void setScore(int n) {
score = n;
}//end setScore

//method to deal damage to character
public void takeDamage(int a) {
hitPoints = hitPoints - a;
}//end takeDamage

//mehtod to add to character score
public void addScore() {
if(modelLocation == "Models/Sinbad.j3o") {
score = score + 1; // 1 point for a ogre
} else {
score = score + 2; //2 points for golems
}//end if else
}//end addScore
}//end character

在另一种方法中,我可以访问在此方法中创建的空间并对其进行更改,但不能访问创建的 emy 角色对象。我只需要知道如何从方法外部访问其 hitPoints 变量等。

最佳答案

局部变量只能“本地”访问,这意味着只能在其创建的范围内(通常由大括号({})定义)(只有方法知道它们在哪里)。

要解决上述问题并使具有字符的变量在方法外部可用,您有几个选择:

  • 将Character变量实现为实例(甚至可能是类变量)并在方法内对其进行初始化。
  • 更好的方法是通过您的方法返回 Character 变量。

假设 Spatial 对象描述了角色的位置,您可以将角色和空间作为键值对返回。在这种情况下,我会采用另一种方法,并在角色对象本身内为每个角色定义空间(我不知道您的体系结构是否允许这样做)。

关于java - 是否可以访问在方法内部创建的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58262295/

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