2015-12-30 3 views
-2

Итак, у меня есть небольшой кусок кода. То, что код должен делать:Ускорение не добавляется на

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

@SuppressWarnings("serial") 
public class squareMovingUsingArrowKeys extends JPanel implements ActionListener,KeyListener { 
static int x; 
static int y; 
static double acceleration=0.3; 
static int originSpeed; 
static int actualSpeed; 
static boolean a=false; 
Timer timer; 
squareMovingUsingArrowKeys() { 
    x = 0; 
    y = 0; 
    acceleration = 0.3; 
    actualSpeed = 1; 
} 
@SuppressWarnings("deprecation") 
public void keyPressed(KeyEvent e) { 
    a = true; 
    System.out.println(actualSpeed); 
    actualSpeed+=acceleration; 
    if (e.getKeyCode() == KeyEvent.VK_LEFT) { 
     x -= actualSpeed; 
    } 
    if (e.getKeyCode() == KeyEvent.VK_RIGHT) { 
     x += actualSpeed; 
    } 
    if (e.getKeyCode() == KeyEvent.VK_UP) { 
     y -= actualSpeed; 
    } 
    if (e.getKeyCode() == KeyEvent.VK_DOWN) { 
     y += actualSpeed; 
    } 
    //first call move to update x and y and later repaint that JPanel 
    move(x, y); 
    repaint(); 
} 
public void paintComponent(Graphics g) { 
    super.paintComponent(g); 
    g.setColor(new Color(125,125,255)); 
    g.fillRect(x, y, 20, 20); 
    g.setColor(new Color(100,255,100)); 
    g.fillOval(x, y, 20, 20); 
    if(x>=500){ 
     x=500; 
    }else if(y>=500){ 
     y=500; 
    }else if(x<=0){ 
     x=0; 
    }else if(y<=0){ 
     y=0; 
    } 
} 
public void start() { 
    keyPressed(null); 
    paintComponent(null); 
} 
public static void main(String[] args) { 
    JFrame f = new JFrame("Moving"); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    squareMovingUsingArrowKeys m = new squareMovingUsingArrowKeys(); 
    f.add(m); 
    f.setSize(500, 500); 
    f.setVisible(true); 
    f.addKeyListener(m); 
} 
@Override 
public void actionPerformed(ActionEvent e) { 
    // TODO Auto-generated method stub 
} 

public void keyReleased(KeyEvent arg0) { 
    // TODO Auto-generated method stub 
    originSpeed = 1; 
} 
@Override 
public void keyTyped(KeyEvent arg0) { 
    // TODO Auto-generated method stub 
} 
} 

- Уметь «ускорить», как вы держите кнопку

  • Стоп, когда х или у находится в 500

  • Переместить в вторичные направления

Но, очевидно, это не сработает.

Как это исправить?

+0

Что вы подразумеваете под остановкой? остановить ускорение? и что вы подразумеваете под вторичным направлением? – Sneh

+0

Остановить полностью, а вторичные направления - по диагонали. – bleh

+0

Что вы подразумеваете под "не работает"? Как не работает само проявление? – sisyphus

ответ

2

Ваша переменная actualSpeed - это int, и вы пытаетесь добавить 0,3 к ней, что является двойным и меньше 1. Если бы это было больше 1, скажем 1.2, тогда java добавила бы 1 к вашему actualSpeed.

Изменить тип actualSpeed, чтобы он удвоился, и он будет работать, поскольку вы не можете добавить удвоения или с плавающей точкой в ​​int.

Я также рекомендую вам ознакомиться с примитивными типами данных Java.

Для остановки, когда x = 500 или y = 500. Вам нужно использовать оператор if внутри вашего манипулятора, который проверяет, что оба x & & y меньше 500, иначе он не будет ускоряться. Для перемещения по диагонали. Ваша зеленая точка перемещается по диагонали по моей системе.

+0

Упс, я этого не понимал! Как насчет № 2 и 3? – bleh

+0

Нравится, actualSpeed ​​= 0 для x или y равно 500 – bleh

+0

Я не уверен, спрашиваете ли вы об этом или говорите мне, чтобы это сделать. Но в основном его основное утверждение. Когда вы увеличиваете ускорение, добавьте дополнительную инструкцию if, чтобы проверить, меньше ли x и y меньше 500, если да, то ускорите еще то, что хотите. – Sneh

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