Come sparare i proiettili con Graphics g

di il
14 risposte

Come sparare i proiettili con Graphics g

Salve, sono un principiante in java e sono nuovo su questo forum. Vorrei creare un programma in cui un player(creato con fillRect) spara un proiettile(creato con fillRect) . Ho spulciato tutti i possibili forum, ma non ho capito molto. Potete darmi una mano? grazie per l 'aiuto.

14 Risposte

  • Re: Come sparare i proiettili con Graphics g

    Cadorna100 ha scritto:


    Salve, sono un principiante in java e sono nuovo su questo forum. Vorrei creare un programma in cui un player(creato con fillRect) spara un proiettile(creato con fillRect) .
    Bisogna vedere come hai gestito in generale il painting del gioco ma a parte questo, serve sicuramente una "temporizzazione", cioè fare qualcosa (spostare un disegno) ogni tot di tempo. E anzi, il gioco in generale dovrebbe essere basato per intero su un frame rate specifico in modo da far avanzare tutta la grafica e la logica del gioco ad intervalli di tempo prefissati.
  • Re: Come sparare i proiettili con Graphics g

    In che senso temporizzazione? potresti farmi qualche esempio.
    P.S.: Di recente ho notato su un forum che utilizzavano un Array per creare i proiettili.
    Riguardo alla Gestione del painting te lo allego appena posso.
    Grazie mille.
  • Re: Come sparare i proiettili con Graphics g

    Ecco il codice di Dodge:
    
    package Giocotre;
    
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.event.KeyEvent;
    import java.awt.event.KeyListener;
    
    import javax.swing.*;
    
    public class Dodge extends JPanel implements KeyListener {              
    	//di fill oval 
    	private int x = 5, y = 5;
    	
    	private Player player;
    	private Stage stage;
    
    	
    	
    	public Dodge() {
    		setSize(new Dimension(600, 600));
    		setPreferredSize(new Dimension(800, 600));
    		//per muovere wasd
    		setFocusable(true);
    		//per registrare le key
    		addKeyListener(this);
    		
    		stage = new Stage();
    		player = new Player(200, 200);
    		//1) prima era player = new Player(200, 200);
    	}
    	
    	@Override //serve override
    	public void update(Graphics g) {
    		paint(g);
    	}
    	
    	
    	public void paint(Graphics g) {
    		g.setColor(Color.BLACK);
    		g.fillRect(0, 0, getWidth(), getHeight());
    		
    		stage.draw(g);	
    		player.draw(g);
    		
    		g.dispose();
    		repaint();
    		
    	}
    	
    	@Override
    	public void keyPressed(KeyEvent e) {
    		int c = e.getKeyCode();
    	
    		if(c == KeyEvent.VK_W) {
    		
    			player.setYD(-1);	
    		}
    		if(c == KeyEvent.VK_A) {
    			//y++;
    			player.setXD(-1);
    		}
    		if(c == KeyEvent.VK_S) {
    			
    			player.setYD(1);
    		}
    		if(c == KeyEvent.VK_D) {
    			
    			player.setXD(1);
    		}
    	}	
    	@Override
    	public void keyReleased(KeyEvent e) {
    		player.setXD(0);
    		player.setYD(0);
    	}
    	@Override
    	public void keyTyped(KeyEvent e) {
    	}
    	
    	public Stage getStage() {
    		return stage;
    	}
    	
    	//inizio interfaccia
    	public static void main(String[] args) {
    		Dodge game = new Dodge();            
    		
    		JFrame frame = new JFrame();
    		frame.setTitle("dodge the rectangles");
    		frame.add(game);
    		frame.pack();
    		// frame.setSize(new Dimension(500, 400));
    		frame.setResizable(false);
    		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		frame.setLocationRelativeTo(null);
    		frame.setVisible(true);
    		//fine interfaccia
    	}
    	
    
    }
    
    
    
    
    
    
    
  • Re: Come sparare i proiettili con Graphics g

    Ecco il codice di Entity:
    
    import java.awt.Graphics;
    
    //il mondo
    public abstract class Entity {
    	protected int x, y, w, h;
    	protected boolean removed = false;
    	
    	public Entity(int x, int y) {
    		this.x = x;
    		this.y = y;
    	}
    	
    	public void draw(Graphics g) {	
    	}
    	public int getX() {return x; }
    	public int getY() {return y; }
    	public int getW() {return w; }
    	public int getH() {return h; }
    	
    
    }
    
    
    
  • Re: Come sparare i proiettili con Graphics g

    Il codice di Player:
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    
    public class Player extends Entity {
    	//direzioni
    	private int xd, yd;
    	
    	public Player(int x, int y) {
    		super(x, y);
    		w = 16; h = 16; 
    	}
    	
    	public void draw(Graphics g) {
    		move();
    		
    		g.setColor(Color.orange);
    		g.fillOval( x, y, w, h);   //g.fillOval( x, y, w, h);	
    	}
    	
    	public void move() {
    		x += xd;              
    		y += yd;              
    	}
    	public void setXD(int value) {
    		xd = value;
    	}
    	public void setYD(int value) {
    		yd = value;
    	}
    }
    
    
    
    
  • Re: Come sparare i proiettili con Graphics g

    Il codice di Stage:
    
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Rectangle;
    
    public class Stage {
    	
    	private Rectangle platform = new Rectangle(0, 540, 800, 100);
    	public Stage() {
    	}
    	
    	public void draw(Graphics g) {
    	
    		g.setColor(Color.white);
    		g.fillRect(platform.x, platform.y, platform.width, platform.height);
    	
    	}
    
    }
    
    
    
  • Re: Come sparare i proiettili con Graphics g

    Cadorna100 ha scritto:


    Ecco il codice di Dodge:
    - Il update(Graphics) non ti serve affatto.
    - Nei componenti Swing (es. JPanel) il "contesto" di painting più corretto e appropriato è il metodo:

    protected void paintComponent(Graphics)

    Il paint(Graphics) esiste ovviamente ancora ma andrebbe ridefinito solo se "sai veramente quello che stai facendo".

    - Il g.dispose() non va fatto, non sei tu il "proprietario" di quel Graphics ma il framework.
    - Fare repaint() dentro il paint è assolutamente sbagliatissimo (e pericoloso).
  • Re: Come sparare i proiettili con Graphics g

    -il metodo repaint() e il metodo dispose() posso eliminarli?
  • Re: Come sparare i proiettili con Graphics g

    Cadorna100 ha scritto:


    -il metodo repaint() e il metodo dispose() posso eliminarli?
    Sì, assolutamente (e anche l'override di update() ). Il repaint() presumo l'avessi messo per far "avanzare" il gioco. Ma non è così che va fatto.
  • Re: Come sparare i proiettili con Graphics g

    Grazie mille.
    Riguardo ai proiettili come li costruisco? inoltre per "sparare" i proiettili cliccando sulla barra spaziatrice.
  • Re: Come sparare i proiettili con Graphics g

    Cadorna100 ha scritto:


    Riguardo ai proiettili come li costruisco? inoltre per "sparare" i proiettili cliccando sulla barra spaziatrice.
    Innanzitutto ti serve una "temporizzazione" per l'intero gioco. In Swing il modo più semplice per avere un timer che dia eventi ogni tot di tempo è la classe javax.swing.Timer. Il lato positivo di questo timer è che dispaccia gli eventi ad un ActionListener e lo fa nel contesto del Event Dispatch Thread, quindi PUOI accedere alla interfaccia utente. Il lato negativo è che essendo basato su eventi non è "preciso", cioè va bene per temporizzazioni "tranquille" ma soprattutto senza grosse pretese.
  • Re: Come sparare i proiettili con Graphics g

    Grazie mille.
    E come faccio a dire al KeyEvent SPACE di sparare un proiettile?
  • Re: Come sparare i proiettili con Graphics g

    Cadorna100 ha scritto:


    E come faccio a dire al KeyEvent SPACE di sparare un proiettile?
    La logica di gestione del/i proiettile/i chiaramente deve basarsi anche sulla temporizzazione. Quindi una volta creato l'oggetto che "modella" il proiettile, ad ogni tot di tempo dovrai spostarlo di coordinate. E verificare collisioni, ecc...
  • Re: Come sparare i proiettili con Graphics g

    Ti ringrazio tantissimo.
Devi accedere o registrarti per scrivere nel forum
14 risposte