教程1-简易飞机大战-第一节
介绍
此教程为Java。为实验一些新想法而作,记录于此,方便与众神交流学习。
使用swing+swt作可视化。
本节实现界面的显示,和标题的出现,与鼠标进入选项的动画。
图片使用的网络素材,不利用而进行其他收费处理,侵改。
效果
主函数
package spaceWar;
class SWmain {
public static void main(String[] args) {
new SWmaster();
}
}
为整个程序的运行入口。
窗口函数
package spaceWar;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
public class SWmaster extends JFrame{
private SWFloorOne floor1;
private int checkpoint=0;//关卡
private int bgx=0,bgy=0;//背景坐标
private int titlex=20,titley=200;//标题坐标
public SWmaster() {
setTitle("简易太空大战 v1.0");
setBounds(0, 0, 512,927);
setLocationRelativeTo(null);//窗口居中
setResizable(false);//禁用缩放
setLayout(null);//自定义布局
floor1=new SWFloorOne(0, new int[] {0, 0},new int[] {512,927},titlex,titley);
floor1.setBounds(0, 0, 512, 927);
this.add(floor1);
//窗口动作监听
addWindowListener(new WindowListener() {
@Override
public void windowOpened(WindowEvent e) {}
@Override
public void windowIconified(WindowEvent e) {}
@Override
public void windowDeiconified(WindowEvent e) {}
@Override
public void windowDeactivated(WindowEvent e) {}
@Override
public void windowClosing(WindowEvent e) {System.exit(0);}//终止该进程
@Override
public void windowClosed(WindowEvent e) {}
@Override
public void windowActivated(WindowEvent e) {}
});
//线程刷新
Timer ti=new Timer();
ti.schedule(new updateUI(),new Date(),15);
ti.schedule(new updateData(),new Date(),20);
setVisible(true);//显示窗口
}
//界面刷新
private class updateUI extends TimerTask{
@Override
public void run() {
floor1.repaint();//刷新
}
}
//数据更新
private class updateData extends TimerTask{
@Override
public void run() {
if(titley>50) {
titley--;
floor1.settitlecoor(titlex, titley);
}
}
}
}
绘制函数-jpanel
package spaceWar;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import java.util.Vector;
import javax.swing.JPanel;
public class SWFloorOne extends JPanel{
//背景层
private Vector<Image> bg=new Vector<Image>();//背景
private int checkpoint=0;//关卡
private int drawx=0,drawy=0;//绘制坐标
private int drawsizex=0,drawsizey=0;
//控件层
private Image title=Toolkit.getDefaultToolkit().createImage("./SWmaterial/title.png");//标题
private int titlex=0,titley=0;//标题坐标
//按钮状态
private Image playeronepng=Toolkit.getDefaultToolkit().createImage("./SWmaterial/oneplayer.png");
private Image playertwopng=Toolkit.getDefaultToolkit().createImage("./SWmaterial/twoplayer.png");
private Image gameinfobu=Toolkit.getDefaultToolkit().createImage("./SWmaterial/info.png");
private Image playeronepng2=Toolkit.getDefaultToolkit().createImage("./SWmaterial/oneplayer2.png");
private Image playertwopng2=Toolkit.getDefaultToolkit().createImage("./SWmaterial/twoplayer2.png");
private Image gameinfobu2=Toolkit.getDefaultToolkit().createImage("./SWmaterial/info2.png");
private boolean isenterplayeronepng=false;
private boolean isenterplayertwopng=false;
private boolean isentergameinfobu=false;
private boolean gameisstart=false;
public SWFloorOne(int checkpoint,int drawcoor[],int drawsize[],int titlex,int titley) {
bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg.jpg"));
bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg1.jpg"));
bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg2.jpg"));
bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg3.jpg"));
bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg4.jpg"));
bg.add(Toolkit.getDefaultToolkit().createImage("./SWmaterial/bg5.jpg"));
this.checkpoint=checkpoint;
this.drawx=drawcoor[0];
this.drawy=drawcoor[1];
this.drawsizex=drawsize[0];
this.drawsizey=drawsize[1];
this.titlex=titlex;
this.titley=titley;
//监听鼠标动作
addMouseMotionListener(new MouseMotionListener() {
@Override
public void mouseMoved(MouseEvent e) {//移动鼠标触发
int x=e.getX(),y=e.getY();
if(!gameisstart) {
if(x>185 && x<327 && y>600 &&y<650)isenterplayeronepng=true;
else isenterplayeronepng=false;
if(x>185 && x<327 && y>670 &&y<720)isenterplayertwopng=true;
else isenterplayertwopng=false;
if(x>185 && x<327 && y>740 &&y<790)isentergameinfobu=true;
else isentergameinfobu=false;
}
}
@Override
public void mouseDragged(MouseEvent e) {}
});
}
@Override
public void paint(Graphics g) {
if(!gameisstart) {
g.drawImage(bg.get(checkpoint),drawx,drawy,drawsizex,drawsizey,this);
g.drawImage(title, titlex,titley,472,146,this);
if(titley<60) {
if(isenterplayeronepng)g.drawImage(playeronepng2,181,600,this);
else g.drawImage(playeronepng,181,600,this);
if(isenterplayertwopng)g.drawImage(playertwopng2,181,670,this);
else g.drawImage(playertwopng,181,670,this);
if(isentergameinfobu)g.drawImage(gameinfobu2,181,740,this);
else g.drawImage(gameinfobu,181,740,this);
}
}
//声明
g.setColor(Color.white);
g.drawString("声明:本作为教学提供,不作任何收费,图片素材源自网络,侵删", 80,840);
}
public void setcoor(int drawx,int drawy) {
this.drawx=drawx;
this.drawy=drawy;
}
public void settitlecoor(int titlex,int titley) {
this.titlex=titlex;
this.titley=titley;
}
}