studio rotate programacion poner otro móviles metodo imagenes imagen formularios encima desarrollo curso como aplicaciones java image swing animation sprite

java - rotate - ¿Cómo dibujo la misma imagen en movimiento varias veces?



metodo rotate en java (2)

¿Intentó crear otra instancia de Image ? Por ejemplo:

Image fireball, firball2;

Ahora tienes dos objetos de Image . Entonces cuando llamas a g.dawImage(...) :

public void paint(Graphics g){ g.drawImage(fireball, x, y, null); g.drawImage(fireball2, x+10, y+10, null);//just draw this other Image }

Puedes seguir dibujando varias imágenes. Además, cambié las posiciones y , por lo que los dos objetos de Image no se superponen.

Ahora, si quiere un grupo de objetos de Image , entonces use un objeto ArrayList of Image :

ArrayList<Image> fireballs = new ArrayList<Image>();

Lea más acerca de ArrayList aquí.

Hola, estoy haciendo un juego de plataformas y cuando presionas espacio el personaje dispara una bola de fuego que se mueve por la pantalla, pero cuando presionas espacio nuevamente las coordenadas de la bola de fuego regresan a las coordenadas del jugador en lugar de dibujar otra bola de fuego que es lo que quiero.

import java.awt.*; import javax.swing.*; public class Fire extends JPanel{ Image fireball; private int x=155000,y=155000; Player player = new Player(); public void paint(Graphics g){ g.drawImage(fireball, x, y, null); } public Fire(){ } public void update(){ fireball = new ImageIcon("C://Users//steven.greens10//Desktop//Programs//Raw Java//Platform//res//fireball.png").getImage(); x+=5; if(x > 640){ x=155000; } } public void shoot(Player p){ x = p.getX(); y = p.getY(); repaint(); } }


@KevinWorkman tiene razón. Necesitas algún tipo de estructura de datos para sostener las bolas de fuego. En el siguiente ejemplo usé una List de Fireball de Fireball .

List<Fireball> fireBalls; ... private class Fireball { Image fireball; int x = 150; int y = 125; public Fireball(Image image) { fireball = image; } public void drawFireball(Graphics g) { g.drawImage(fireball, x, y, 50, 50, null); } }

Para pintarlos, simplemente repito a través de ellos. Para hacer que avancen, solo aumento el valor de x en el temporizador y repito la llamada

@Override protected void paintComponent(Graphics g) { super.paintComponent(g); ... for (Fireball ball : fireBalls) { ball.drawFireball(g); } }

Aquí está el código completo

import java.awt.*; import java.awt.event.*; import java.awt.image.BufferedImage; import java.io.IOException; import java.net.URL; import java.util.*; import java.util.List; import java.util.logging.*; import javax.imageio.ImageIO; import javax.swing.*; import javax.swing.Timer; public class WannaBeStreetFighter extends JPanel { private static final int D_W = 700; private static final int D_H = 250; private static final int X_INC = 10; List<Fireball> fireBalls; BufferedImage ryu; BufferedImage fireball; BufferedImage background; public WannaBeStreetFighter() { try { ryu = ImageIO.read(new URL("http://www.sirlin.net/storage/street_fighter/ryu_hadoken_pose.png?__SQUARESPACE_CACHEVERSION=1226531909576")); background = ImageIO.read(new URL("http://fightingstreet.com/folders/variousinfofolder/ehondasbath/hondasfz3stage.gif")); fireball = ImageIO.read(new URL("http://farm6.staticflickr.com/5480/12297371495_ec19ded155_o.png")); } catch (IOException ex) { Logger.getLogger(WannaBeStreetFighter.class.getName()).log(Level.SEVERE, null, ex); } fireBalls = new LinkedList<>(); Timer timer = new Timer(40, new ActionListener() { @Override public void actionPerformed(ActionEvent e) { Iterator<Fireball> it = fireBalls.iterator(); while (it.hasNext()) { Fireball ball = it.next(); if (ball.x > D_W) { it.remove(); System.out.println(fireBalls.size()); } else { ball.x += X_INC; repaint(); } } } }); timer.start(); InputMap inputMap = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); inputMap.put(KeyStroke.getKeyStroke("SPACE"), "hadouken"); getActionMap().put("hadouken", new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { fireBalls.add(new Fireball(fireball)); } }); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); g.drawImage(background, 0, 0, D_W, D_H, this); g.drawImage(ryu, 50, 125, 150, 115, this); for (Fireball ball : fireBalls) { ball.drawFireball(g); } } @Override public Dimension getPreferredSize() { return new Dimension(D_W, D_H); } private class Fireball { Image fireball; int x = 150; int y = 125; public Fireball(Image image) { fireball = image; } public void drawFireball(Graphics g) { g.drawImage(fireball, x, y, 75, 50, null); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { JFrame frame = new JFrame("Best Street Fighter ever"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.add(new WannaBeStreetFighter()); frame.pack(); frame.setLocationRelativeTo(null); frame.setVisible(true); } }); } }