2011-08-10 2 views
0

[Пожалуйста, обратите внимание, это может потребовать AS3 + Java знания]Java - Заявления/Конверсии | Pulpcore

Справочная информация:

Я пытаюсь построить игру, используя 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 для указанной выше строки в классе Container?

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; и Google, но я не смог ничего найти об этом.

Спасибо, jvmpulp

ответ

1

Alrighty! У меня нет опыта работы с PulpCore, но я знаю как AS3, так и Java, поэтому я думаю, что могу ответить на ваш вопрос. Во-первых, я думаю, что я не на 100% понимаю, что вам нужно делать с чемпионом в классе 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 подкласс Champion:

public class Blunder extends Champion { 

    public Something getSomething() { 
     return this.something; 
    } 

} 

т.д. Тогда, наконец, сделать это:

public void initObjects() { 

    container = new Container(new Blunder()); 

} 

Очевидно, что это основной пример, и вам не нужно принимать мои советы. Но, вероятно, было бы легче сделать, чем система, которую вы уже использовали в AS3.