我试图将私有方法中的变量调用到同一个类中的另一个方法,但是在chicken.x
我得到错误:
chicken cannot be resolved to a variable
如何从私有方法中调用精灵矩形?
代码:
public class OptionScreen implements Screen{
...
Array<Rectangle> chickens;
...
public OptionsScreen(){
...
chickens = new Array<Rectangle>();
...
}
private void spawnChicken(){
Rectangle chicken = new Rectangle();
...
chickens.add(chicken);
...
}
public void render(float delta){
...
diffYchick = (float) (farmerY - chicken.y); // Error here
...
}
}
答案 0 :(得分:1)
聊天后要回答聊天中讨论的基本问题:
有一个ArrayList<Rectangle> chickens
作为OptionsScreen
类的实例变量。 OP没有从Rectangle
方法的ArrayList
中获取render
。 OP使用来自不同方法的变量名chicken
,spawnChicken
只有方法范围。我向OP展示了如何在ArrayList
方法中循环render
,一次访问一个Rectangle
,然后执行必要的操作。
来自聊天和编辑问题之前 sprite
的范围仅在方法method
中。这意味着您只能在sprite
内部使用method
变量。你可以使sprite
成为一个实例变量,然后你可以在同一个类的另一个方法中访问它。
public class OptionScreen{
private Rectangle sprite; // Make instance variable
public OptionScreen(){ // Constructor - called when initializing
sprite = new Rectangle(); // Initialize (so it's not null)
... // Set other info on sprite, such as x
}
public void render(float delta){
...
sprite.x;
...
}
public static void main(String[] args){ // Example of useage
OptionScreen optionScreen = new OptionScreen(); // Constructor called
optionScreen.render(1.1);
}
}
在构造函数中初始化sprite
可确保在尝试使用null
时不会render
。 (除非您将其设置为null
)
注意:不要将方法命名为method
,这可能是一个好主意,因为它会让人感到困惑。
答案 1 :(得分:0)
如果您在一个方法中本地定义sprite
,则无法在其他方法中访问它。
虽然不确定chicken
(你发布的代码中没有这样的变量)。
如果必须通过其他方法访问sprite
,请将其设为实例变量。
public class ClassName
{
private Rectangle _sprite = null;
...
private void method(){
_sprite = new Rectangle();
}
...
public void render(float delta) {
if (_sprite != null) {
_sprite.x ...
}
}
}