Java - Заявления / Конверсии | Pulpcore
[обратите внимание, это может потребовать знания 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 package
Blunder.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 constructor
1.) Как бы я переписал на Java?
blunder = new Container(Blunder as Class);
2.) Как бы я мог принять любые классы в Java для вышеуказанной строки в моем классе контейнера?
public function Container(champ:*) {
Мне нужно сделать это, потому что я отправляю разные классы чемпионов (в зависимости от того, что выберет пользователь) в содержащий класс, который будет содержать все остальные классы (здоровье и т. Д.). Мне нужен мой класс-контейнер для принятия любого класса, а не только одного; какой тип я бы использовал?
Вот что я имею в 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
Извините за длинный пост, и спасибо за любую помощь. Кстати, я проверил Stackru; и Google, но я не смог ничего найти по этому поводу.
Спасибо jvmpulp
1 ответ
Alrighty! У меня нет опыта работы с PulpCore, но я знаю и AS3, и Java, поэтому думаю, что смогу ответить на ваш вопрос. Во-первых, я думаю, что я не на 100% понимаю, что нужно делать с объектом champ в классе Container, и я действительно не понимаю, почему вы это делали 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.