请注意,这可能需要AS3 + Java知识
背景信息:
我正在尝试使用Java + Pulpcore构建一个游戏,但我对这一领域还是相当陌生的。我正在构建的游戏可能会比我想象的更具性能密集型,我知道Java会解决我的问题,但我在处理严格类型等方面有几个问题。
下面是我在AS3中的代码:
Main.as3
import org.tbmb.champions.Container;
import org.tbmb.zombies.ZContainer;
public class Main extends MovieClip {
// ******* temporary properties ******* /
private var blunder:Container = null;
// ******* ******* /
public function Main() {
init(); // initialize objects
}
public function init():void {
blunder = new Container(Blunder as Class);
} // end of class
}Container.as3
package org.tbmb.champions {
import flash.display.MovieClip;
public class Container extends MovieClip {
public function Container(champ:*) {
} // end of constructor
} // end of class
} // end of packageBlunder.as3
package org.tbmb.champions.blunder {
import flash.display.MovieClip;
public class Blunder extends MovieClip {
public function Blunder() {
} // end of constructor
} // end of class
} // end of constructor1.)我该如何在Java中重写?
blunder = new Container(Blunder as Class);2.)我如何才能在我的Container类中接受上述行的Java类呢?
public function Container(champ:*) {我之所以需要这样做,是因为我将不同的冠军类(取决于用户选择的类)发送到一个包含所有其他类(健康等)的类。我需要我的Container类接受任何类,而不是只接受一个;我应该使用什么类型?
到目前为止,我在Java中的代码如下:
ZomboPulp.java (主类)
import pulpcore.scene.Scene2D;
import org.tnpfk.champions.Container;
import org.tnpfk.champions.blunder.Blunder;
import pulpcore.sprite.FilledSprite;
import pulpcore.image.Colors;
public class ZomboPulp extends Scene2D {
FilledSprite background = new FilledSprite(Colors.WHITE);
Container container = null; // Container that contain's blunder,
// and all his objects (health, mana, etc)
public void load() {
this.initScreen(); // initialize main screen.
this.initObjects(); // initialize our objects.
} // end of load();
public void initScreen() {
add(background);
} // end of initScreen();
public void initObjects() {
container = new Container(Blunder as Class); // ERROR HERE
} // end of initObjects();
}Container.java
package org.tnpfk.champions;
public class Container {
public Container(Object champ) {
} // end of constructor
} // end of class很抱歉写了这么长的帖子,谢谢你的帮助。顺便说一句,我确实查过StackOverflow;和谷歌,但我找不到任何关于这方面的信息。
谢谢你,jvmpulp
发布于 2011-08-10 15:07:45
好吧!我没有使用PulpCore的经验,但是我知道AS3和Java,所以我想我可以回答你的问题。首先,我想我不是100%理解你需要对容器类中的冠军对象做什么,我真的不明白你为什么要做Blunder as Class而不是仅仅传递一个错误的实例。无论哪种方式,以下是我对你目前所拥有的建议:
public void initObjects() {
container = new Container(Blunder.class);
}如您所见,只需获取任何类的class属性,就可以获得一个类实例。现在,您已经对使用Object作为任何类型的容器构造函数的类型有了正确的想法。然而,使用Object是一种糟糕的做法(使用方法重载/更具体的类型),这里甚至不需要它。获取class属性的类型将始终是Class,即使它们表示不同的类。因此,将构造函数重写为:
public Container(Class champ) {
}然后,对这个类做任何你需要做的事情。
现在,这基本上是一个直接端口,但似乎您正在做的一些事情是糟糕的实践。传递Class对象的整个系统似乎并不相关,也没有必要;为什么不只传递对象的一个实例呢?例如,如下所示:
public class Container {
protected Champion champ;
public Container(Champion champ) {
this.champ = champ;
}
}现在,让Champion成为一个抽象类,其中包含所有冠军的通用方法:
public abstract class Champion {
protected Something something;
abstract Something getSomething();
}(显然,这里显示的变量/方法只是示例。)然后,让你的个人冠军班子类Champion
public class Blunder extends Champion {
public Something getSomething() {
return this.something;
}
}等。然后,最后,执行以下操作:
public void initObjects() {
container = new Container(new Blunder());
}显然,这只是一个基本的例子,您不必接受我的建议。但这可能比您在AS3中已有的系统更容易做到。
https://stackoverflow.com/questions/7006533
复制相似问题