昨天写了坦克大战的最初始的页面,预计今天能写好键盘控制一个坦克的基本移动。
方法是:
img1 = Toolkit.getDefaultToolkit().createImage("./img/Tank.jpg");//获得图片
---------------------------------------------------------------------------------------------------
this.addKeyListener(new KeyAdapter() {//t添加键盘监听
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {//如果是按下了->按键,修改坐标,重绘,起到动态刷新的作用
by = by + 5;
;repaint();}
----------------------------------------------------------------------------------------------
public void paint(Graphics g) {
g.drawImage(img1, by, zong,50,50, this);
}
最开始遇到的问题是坦克的掉头问题,因为写出来的坦克很傻,只会傻傻的上下左右动,头直挺挺的对着正前方。然后我搜了一下怎么掉头,大牛们给出的方法都好复杂,就是把我头的看疼的那种。。。然后我实在是搞不定,就自己想了一个笨办法。。。:
###像这样资源库里放四个ps处理的除了方向不一样其他都一样的Tank。然后调用。。。就会神奇的发现想要的效果就ok了。我不会做GIF,在这里附上代码,可以试着跑一下。
package xyz.jz.tank2;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Sample extends Frame {
private Image img1 = null;
private Image img2 = null;
private Image img3 = null;
private Image img4 = null;
private Image button = null;
private int flag = 1;
int by = 150;
int zong=30;
public static void main(String[] args) {
new Sample();
}
public Sample() {
this.setSize(803, 603);
this.setLocation(100,100);
img1 = Toolkit.getDefaultToolkit().createImage("./img/Tank.jpg");
img2 = Toolkit.getDefaultToolkit().createImage("./img/TankDown.jpg");
img3 = Toolkit.getDefaultToolkit().createImage("./img/TankLeft.jpg");
img4 = Toolkit.getDefaultToolkit().createImage("./img/TankRight.jpg");
button = Toolkit.getDefaultToolkit().createImage("./img/button.jpg");
this.addWindowListener(new WindowAdapter() {//时候允许退出
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
this.addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_RIGHT) {
by = by + 5;
flag=4;repaint();}
else if(e.getKeyCode() == KeyEvent.VK_LEFT) {
by = by -5;
flag=3;repaint();}
else if(e.getKeyCode() == KeyEvent.VK_UP) {
zong = zong-5;
flag=1;repaint();}
else if(e.getKeyCode() == KeyEvent.VK_DOWN) {
zong = zong+5;
flag=2;repaint();}
}
});
this.setVisible(true);
}
public void paint(Graphics g) {
if(flag==1) {
g.drawImage(img1, by, zong,50,50, this);
flag=1;
}else if(flag==2) {
g.drawImage(img2, by, zong,50,50, this);flag=1;
}else if(flag==3) {
g.drawImage(img3, by, zong,50,50, this);flag=1;
}else if(flag==4) {
g.drawImage(img4, by, zong,50,50, this);flag=1;
}
}
}
写到这里坦克大战的第二天就算结束了,下一次的任务是写一个子弹发射的东西,子弹估计肯定是要有自己的线程的,什么时候“初始化”,什么时候死亡?其实今天也有尝试,只是没写好。
而且对于这个库Graphics,还是不会用,第一天提到添加函数有两种方法,第一天的页面用的是标签内嵌。今天就是Graphics的使用了。
诶。。。好难好难