Velocidade

2 respostas
G

Olá, possuo um simples GUI em que quando uma bolinha bate na parede, o jogador perde o jogo e precisa recomeçar, porém eu gostaria de fazer o seguinte, aumentar a velocidade da bolinha, que eu defini como 1 pixel, só que por exemplo se eu defino como 3 pixels a velocidade, quando a bolinha bater na parede que seria a posição 271 por exemplo, ela passa reto, pois 271 não é multiplo de 3.

Eu sei que parece complicado então vou fazer uma pergunta direta:

Como acelerar a velocidade de maneira correta, em que o jogador se passar por aquela posição, ele morra?

meu código atual:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

/**
 *
 * @author Usuario
 */


class Panel extends JPanel implements KeyListener {

    int PosX = 185;
    int PosY = 125;
    boolean isAlive = true;

    private JLabel L;

    public Panel() {

        this.setPreferredSize(new Dimension(400, 325));
        this.setFocusable(true);
        this.addKeyListener(this);

        L = new JLabel();
        L.setForeground(Color.red);
        this.add(L);
       
    }

    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {

            case KeyEvent.VK_UP:

            if(PosY == 0) { isAlive = false; break; }
            if(isAlive == false) { break; }

            PosY -= 1;
            break;

            case KeyEvent.VK_DOWN:

            if(PosY == 270) { isAlive = false; break; }
            if(isAlive == false) { break; }

            PosY += 1;
            break;

            case KeyEvent.VK_RIGHT:

            if(PosX == 370) { isAlive = false; break; }
            if(isAlive == false) { break; }

            PosX += 1;
            break;

            case KeyEvent.VK_LEFT:

            if(PosX == 0) { isAlive = false; break; }
            if(isAlive == false) { break; }

            PosX -= 1;
            break;
            
            case KeyEvent.VK_ENTER:
            this.remove(L);
            isAlive = true;
            PosX = 185;
            PosY = 125;
            break;

        }
        repaint();
    }

    public void keyReleased(KeyEvent e){

    }

    public void keyTyped(KeyEvent e)   {

    }

    @Override
    protected void paintComponent( Graphics g ) {
        g.setColor(Color.black);
        g.fillRect(0, 0, this.getWidth(), this.getHeight());

        if(isAlive == false) {

            g.setColor(Color.red);
            g.fillOval(PosX, PosY, 20, 20);
            L.setText("Você perdeu, para recomeçar aperte 'ENTER'");
            this.add(L);

        } else {

            g.setColor(Color.white);
            g.fillOval(PosX, PosY, 20, 20);

        }
    }
}


public class Jogo extends JFrame {

    public Jogo() {

        this.setTitle("Jogo");
        this.setSize(400, 325);
        this.setLocationRelativeTo(null);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        Panel p = new Panel();
        this.add(p);

    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Jogo().setVisible(true);
            }
        });
    }
 }

2 Respostas

M

Você poderia deixar seu método keyPressed assim:

// velocity é uma variável da classe para ficar fácil fazer alterações
    public void keyPressed(KeyEvent e) {

        switch (e.getKeyCode()) {
            case KeyEvent.VK_UP:
                if (PosY <= 0) {
                    isAlive = false;
                    break;
                }
                if (!isAlive) {
                    break;
                }
                PosY -= velocity;
                break;

            case KeyEvent.VK_DOWN:
                if (PosY >= getSize().height) {
                    isAlive = false;
                    break;
                }
                if (!isAlive) {
                    break;
                }
                PosY += velocity;
                break;

            case KeyEvent.VK_RIGHT:
                if (PosX >= getSize().width) {
                    isAlive = false;
                    break;
                }
                if (!isAlive) {
                    break;
                }
                PosX += velocity;
                break;

            case KeyEvent.VK_LEFT:
                if (PosX <= 0) {
                    isAlive = false;
                    break;
                }
                if (!isAlive) {
                    break;
                }
                PosX -= velocity;
                break;

            case KeyEvent.VK_ENTER:
                this.remove(L);
                isAlive = true;
                PosX = 185;
                PosY = 125;
                break;

        }
        repaint();
    }
Tchello

Ou vc poderia considerar como perdido quando a bolinha estivesse em posicao maior ou igual a 271, nao igual a 271.

Criado 13 de dezembro de 2009
Ultima resposta 13 de dez. de 2009
Respostas 2
Participantes 3