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.

Другие вопросы по тегам