2013-05-31 2 views
0

Хорошо, поэтому я понимаю, что изображения можно отображать в операторе рендеринга. Однако у меня есть один вопрос. Есть ли способ создать объект динамически (например, класс Plane) и создать и визуализировать изображение через текстуру, называемую String? Например, если у меня есть класс с именем Пули, как я могу динамически создать изображение, как я бегуJava - Slick2D - Динамическое создание объектов

Bullet myBullet = new Bullet(); 

? Я бы очень признателен за помощь.

Пример:

class Bullet 
{ 
    public float x, y = 0; 
    public float rotation = 0; 
    public void bullet(posX, posY) 
    { 
     x = posX; 
     y = posY; 
    } 

Кроме того, как я могу сделать это цикл метод автоматически (у меня уже есть цикл работает в главном классе, но как я могу добавить это к блоку?)?

public void update() { 
    x += 2 * Math.cos((Math.PI/180) * rotation); 
    y += 2 * Math.sin((Math.PI/180) * rotation); 
} 
} 

Спасибо,

Джо

EDIT: По создать изображение, я имею в виду также сделать его.

Или, для игры я работаю над тем, что ведет себя как Frogger, как я могу сделать этот образ Image обработанной текстурой, когда я объявляю его, и добавляю его инструкцию update в цикл update() в файле BasicGame? упаковка разный;

import mobile.MobileOctopus; 

import org.newdawn.slick.Image; 
import org.newdawn.slick.SlickException; 

public class Current { 
    public Image texture; 
    public float x, y = 0; 
    MobileOctopus player; 
    public Current(int posY, MobileOctopus character) throws SlickException 
    { 
     texture = new Image("res/current.png"); 
     x = 0; 
     y = posY; 
     player = character; 
    } 
public void update() 
{ 
    x -= 3; 
    if(x < -380) 
    { 
     x = 0; 
    } 
    if(player.y + 32 > y && player.y + 32 < y + 32) 
    { 
     player.x -= 3; 
    } 
} 
} 

Текущий класс перемещает игрока влево, когда он находится внутри него. Но, как я могу сделать сказанное выше по телефону

Current myCurrent = new Current(100, player); 

ответ

0

На мой взгляд, когда вы загружаете объект пули, загрузить изображение внутри конструктора и сохранить его в переменной. То есть, если он не слишком большой для хранения файла.

public Bullet(){ 
    //Load image here 
} 

Насколько я знаю, метод обновления вызывается в цикле. Asumming вашего вопроса находится в пределах класса пули просто сделать это:

@Override 
public void update(GameContainer gc, int delta) throws SlickException { 
    bullet.update() 
} 

Если вы вызываете цикл в пределах вашего метода обновления, то это будет только петля пули, прежде чем что-либо в игре может выполнить, обновление или применить. Вы хотите, чтобы вся игра могла корректно обновляться.

EDIT 1

Я понимаю, что вы имеете в виду прямо сейчас. Чтобы сделать изображение объекта, это то, что я сделал. Я не знаю, это лучший способ, но я так и сделал.

Сначала я должен добавить метод Paint к объекту; убедитесь, что вы добавили реализацию графики Slick.

public void paint(Graphics g){ 
    g.drawImage(image, X, Y); 
} 

Внутри метода визуализации вы бы назвали ваш объект и нарисуете его.

public void render(GameContainer gc, Graphics g){ 
    bullet.paint(g); 
} 

Это позволит вам визуализировать объект на экране.Теперь имейте в виду, когда вам нужно нарисовать несколько вещей на экране, вам нужно привести их в порядок, иначе они будут перекрываться.

+0

Да, но, как мне сделать рендер автоматически? Если это в инструкции обновления, мне нужно добавить bullet.update(); пока я его программирую. Кроме того, вы можете отображать только в методе render(). Как я могу это сделать, просто объявив, что это сделает его и добавит bullet.update() в оператор обновления? Может быть, массив? – joeelectricity

+0

@ user2441712 См. Edit. Надеюсь, это поможет. – Twister1002

+0

Хорошо, но как мне это сделать, мне не нужно добавлять bullet.paint() в оператор render? Должен ли я использовать массив изображений? – joeelectricity

0

Когда вы делаете игру, Slick2D будет AUTOMATICALLY вызовите методы и способы их воспроизведения. Все, что вам нужно сделать, это сделать обновление/рендеринг вашей игры вызовом обновления/рендеринга объекта.

Вот пример:

import org.newdawn.slick.*; 

public class ExampleGame extends BasicGame { 
    public static void main(String[] args) throws SlickException { 
     //creates and starts the game 
     AppGameContainer g = new AppGameContainer(new ExampleGame("Title")); 
     g.start(); 
    } 
    public ExampleGame(String title) { 
     super(title); 
    } 

    public void render(GameContainer container, Graphics g) 
      throws SlickException { 
     // This code automatically runs on a loop 
     System.out.println("render"); 
    } 

    public void init(GameContainer container) throws SlickException { 
     // This code runs once 
     System.out.println("init"); 
    } 

    public void update(GameContainer container, int delta) 
      throws SlickException { 
     // This code automatically runs on a loop: 
     System.out.println("update"); 

    } 

}* 

Это то, что выводит в журнал:

init 
render 
update 
render 
update 
render 
render 
render 
update 
render 
... 

Как вы можете видеть, например, код не имеет петлю, призывающую оказывать или обновление. У Slick2D есть встроенная петля.

Смежные вопросы