java添加keylisten_如何在Java中使用KeyListener移动多边形对象

我正在作为学习项目来开发2D游戏,但遇到了麻烦。我无法弄清楚如何使用JPanel(添加到JFrame)中的KeyListener移动Polygon对象。我已经尝试过frog.translate(int

x,int y)方法,该方法不会更新位置。我也尝试过手动更改数组坐标。我的代码示例如下:

import javax.swing.*;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

public class Board extends JPanel implements KeyListener {

private Frog frog;

public Board() {

setBackground(Color.GREEN);

addKeyListener(this);

setFocusable(true);

setFocusTraversalKeysEnabled(false);

}

@Override

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D)g;

frog = new Frog();

// Frog graphics

g2.setColor(Color.BLACK);

g2.drawPolygon(frog);

g2.setColor(new Color(0,150,15));

g2.fillPolygon(frog);

}

@Override

public void keyTyped(KeyEvent ke) {

}

@Override

public void keyPressed(KeyEvent ke) {

int c = ke.getKeyCode();

if(c == KeyEvent.VK_LEFT){

frog.moveFrogLeft(25);

//frog.translate(-25,0);

}

if(c == KeyEvent.VK_RIGHT){

frog.moveFrogRight(25);

//frog.translate(25,0);

}

if(c == KeyEvent.VK_UP){

frog.moveFrogUp(25);

//frog.translate(0,-25);

}

if(c == KeyEvent.VK_DOWN){

frog.moveFrogDown(25);

//frog.translate(0,25);

}

repaint();

}

@Override

public void keyReleased(KeyEvent ke) {

}

}

///

import java.awt.Polygon;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

public class Frog extends Polygon {

private Integer[] xcoord;

private Integer[] ycoord;

public Frog(){

xcoord = new Integer[] {5,10,10,15,15,20,

20,30,30,35,35,40,40,

45,45,40,40,30,30,40,

40,45,45,40,40,35,35,

30,30,20,20,15,15,10,

10,5,5,10,10,20,20,

10,10,5,5};

ycoord = new Integer[] {10,10,5,5,20,20,

10,10,20,20,5,5,10,10,

15,15,25,25,30,30,35,35,

40,40,45,45,35,35,40,40,

35,35,45,45,40,40,35,35,

30,30,25,25,15,15,10};

for(int i = 0; i < xcoord.length; i++){

this.addPoint(xcoord[i],ycoord[i]);

}

}

public void moveFrogLeft(int x) {

if(xcoord[0] - x < 0){

//do nothing

} else {

for(int i = 0; i < xcoord.length; i++){

xcoord[i] = xcoord[i] - x;

}

}

}

public void moveFrogRight(int x){

if(xcoord[0] + x > 600){

//do nothing

} else {

for(int i = 0; i < xcoord.length; i++){

xcoord[i] = xcoord[i] + x;

}

}

}

public void moveFrogUp(int y){

if(ycoord[0] - y < 0){

//do nothing

} else {

for(int i = 0; i < ycoord.length; i++){

ycoord[i] = ycoord[i] - y;

}

}

}

public void moveFrogDown(int y){

if(ycoord[0] + y > 600){

//do nothing

} else {

for(int i = 0; i < ycoord.length; i++){

ycoord[i] = ycoord[i] + y;

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值