Java - Заявления / Конверсии |Pulpcore - PullRequest
0 голосов
/ 10 августа 2011

[обратите внимание, что для этого может потребоваться знание 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:*) {

Iнеобходимо сделать это, потому что я отправляю разные классы чемпионов (в зависимости от того, что выберет пользователь) в содержащий класс, который будет содержать все остальные классы (здоровье и т. д.).Мне нужен мой класс-контейнер для принятия любого класса, а не только одного;какой тип я бы использовал?

Вот что у меня есть в 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;и Google, но я не смог ничего найти по этому поводу.

Спасибо, jvmpulp

1 Ответ

1 голос
/ 10 августа 2011

Alrighty!У меня нет опыта работы с PulpCore, но я знаю как AS3, так и Java, поэтому думаю, что смогу ответить на ваш вопрос.Во-первых, я думаю, что я не на 100% понимаю, что нужно делать с объектом champ в классе Container, и я действительно не понимаю, почему вы делали Blunder as Class вместо того, чтобы просто пропустить экземпляр Blunder.В любом случае, вот что я бы порекомендовал с тем, что у вас есть на данный момент:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...