Java-语句/转换| Pulpcore
[请注意,这可能需要AS3+Java知识] 背景资料: 我正在尝试使用Java+Pulpcore构建一个游戏,但我对这个场景还相当陌生。我正在构建的游戏可能比我想象的性能更高,我知道Java可以解决我的问题,但是我在处理严格类型时遇到了一些问题,等等 以下是我在AS3中的代码: Main.as3Java-语句/转换| Pulpcore,java,actionscript-3,pulpcore,Java,Actionscript 3,Pulpcore,[请注意,这可能需要AS3+Java知识] 背景资料: 我正在尝试使用Java+Pulpcore构建一个游戏,但我对这个场景还相当陌生。我正在构建的游戏可能比我想象的性能更高,我知道Java可以解决我的问题,但是我在处理严格类型时遇到了一些问题,等等 以下是我在AS3中的代码: Main.as3 import org.tbmb.champions.Container; import org.tbmb.zombies.ZContainer; public class Main extends M
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
}
容器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 package
大错特错
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 constructor
1.)如何用Java重写
blunder = new Container(Blunder as Class);
2.)我如何能够在容器类中接受上述行的Java类
public function Container(champ:*) {
我之所以需要这样做,是因为我正在将不同的冠军类(取决于用户选择的)发送到一个包含它们的所有其他类(健康等)的类。我需要我的容器类接受任何类而不是一个;我会用什么类型的
以下是迄今为止我在Java中所掌握的知识:
zombopilp.java(主类)
Container.java
package org.tnpfk.champions;
public class Container {
public Container(Object champ) {
} // end of constructor
} // end of class
很抱歉发了这么长的帖子,谢谢你的帮助。顺便说一下,我确实检查了StackOverflow;还有谷歌,但我找不到任何关于这方面的信息
谢谢,
JVM纸浆好的!我没有使用PulpCore的经验,但我知道AS3和Java,所以我想我可以回答你的问题。首先,我想我不是100%理解您需要在容器类中对champ对象做什么,我真的不理解您为什么要将
错误作为类来处理,而不是仅仅传递一个错误实例。无论哪种方式,以下是我对您目前拥有的产品的推荐:
public void initObjects() {
container = new Container(Blunder.class);
}
如您所见,只需获取任何类的Class
属性即可获得类实例。现在,使用Object
作为任何类型的容器构造函数的类型是正确的。然而,使用对象
是不好的做法(而是使用方法重载/更具体的类型),这里甚至不需要它。获取class
属性的类型始终为class
,即使它们代表不同的类。因此,将构造函数重写为:
public Container(Class champ) {
}
然后,在课堂上做任何你需要做的事情
现在,这基本上是一个直接端口,但似乎你正在做的一些事情是不好的做法。传递类
对象的整个系统似乎不相关,也没有必要;为什么不直接传递对象的实例呢?例如,像这样:
public class Container {
protected Champion champ;
public Container(Champion champ) {
this.champ = champ;
}
}
现在,让Champion
成为一个抽象类,其中包含所有Champion的通用方法:
public abstract class Champion {
protected Something something;
abstract Something getSomething();
}
(显然,这里显示的变量/方法只是示例。)然后,让您的单个Champion类子类Champion
:
public class Blunder extends Champion {
public Something getSomething() {
return this.something;
}
}
等等。然后,最后,执行以下操作:
public void initObjects() {
container = new Container(new Blunder());
}
显然,这是一个基本的例子,你不必接受我的建议。但这可能比AS3中已有的系统更容易实现
public void initObjects() {
container = new Container(new Blunder());
}