最初,这是从静态上下文错误调用的非静态方法开始的。我已经意识到我不能引用类本身,而是该类的特定实例。但是,在给我的初始化对象一个特定的名称后,我发现java不会确认这个特定的实例,而是将其称为未知变量。在尝试编译代码时,我收到错误“找不到符号 - 变量播放器”。我相信代码不会将类的特定实例识别为已声明的变量。
这是正在初始化的类
Link player = new Link();
addObject(player, 300, 176);
以下是尝试引用此特定实例的方法的方法:
int linkX = player.getX();
代码的第二位是属于ChuChu名称的类的方法。 ChuChu和Link是同一个超类的子类。任何帮助将不胜感激!
世界级:
public Link player;
/**
* Constructor for objects of class ThroneRoom.
*
*/
public ThroneRoom()
{
// Create a new world with 600x562 cells with a cell size of 1x1 pixels.
super(600, 562, 1);
this.player = new Link();
prepare();
}
/**
* Prepare the world for the start of the program. That is: create the initial
* objects and add them to the world.
*/
public void prepare() //R1
{
addObject(player, 300, 176);
addObject(new ChuChu(), 45, 267);
addObject (new ChuChu(), 558, 267);
addObject ( new ChuChu(), 45, 373);
}
ChuChu的完整方法
/**
* Crawl Toward - Makes ChuChus crawl toward Link
*/
public void crawlToward ()
{
int random = (int) Math.random() * 5;
int linkX = player.getX();
int linkY = player.getY();
if(getX() >linkX)
{
setLocation(getX() - random, getY());
}
else
{
setLocation(getX()+random, getY());
}
if(getX() > linkY )
{
setLocation(getX(), getY()-random);
}
else
{
setLocation(getX(), getY()+random);
}
}
我使用的是名为Greenfoot的IDE。我的问题似乎是我给了两个班,世界和演员,他们不能互相继承。从World类中,我将对象实例化为视觉世界,而在Actor中我创建了对象及其方法。
答案 0 :(得分:0)
基于你的澄清评论,这可能有所帮助,Java是块作用域,所以这样的东西不起作用:
if(true) {
Link player = new Link();
}
//player is outside of the block it was declared in
int linkX = player.getX();
在你的情况下,你需要在player
之外声明private void prepare()
(在这种情况下,在类级别最有意义)。你可以自由地在一个块(或你的情况下的方法)中实例化它。这是与您的班级一起快速尝试:
public class World
{
Link player;
public ThroneRoom()
{
// Create a new world with 600x562 cells with a cell size of 1x1 pixels.
super(600, 562, 1);
prepare();
}
/**
* Prepare the world for the start of the program. That is: create the initial
* objects and add them to the world.
*/
private void prepare()
{
this.player = new Link();
addObject(player, 300, 176);
addObject(new ChuChu(), 45, 267);
addObject (new ChuChu(), 558, 267);
addObject ( new ChuChu(), 45, 373);
}
public void crawlToward ()
{
int random = (int) Math.random() * 5;
int linkX = this.player.getX();
int linkY = this.player.getY();
if(getX() >linkX)
{
setLocation(getX() - random, getY());
}
else
{
setLocation(getX()+random, getY());
}
if(getX() > linkY )
{
setLocation(getX(), getY()-random);
}
else
{
setLocation(getX(), getY()+random);
}
}
}