java教程_怎么会抖动 估计是repaint方法的原因(JAVA教程学习参考资料)

50分钟前发布

阅读推荐:
java教程_持久化框架一定能防止SQL注入?(JAVA教程学习参考资料)
java教程_java抽取Word中公式并转化成png格式图片(JAVA教程学习参考资料)
《耀耀谈手绘》手绘系列教程,从入门到精通
POP海报广告模版(12CD转2DVD)百度网盘资源,可直接转存
《Project 2007中文版项目管理从新手到高手》
[jsp学习]Web界面配置Tomcat连接池_java基础知识总结
杰视帮培训视频第五期淘宝美工电商培训设计教程ps视频教程下载
[Java基础知识]一个windows关机程序_java基础知识总结
会声会影X7中文安装包
《金牌网管师(初级)中小型企业网络组建、配置与管理全国网管师职业评定》扫描版[PDF]


本帖最后由 u010189078 于 2014-03-28 21:50:04 编辑 我看韩顺平的视频遇到的问题 线程 ==============================第一个文件===============================
package com.xiaoming1;

import java.awt.*;
import java.awt.event.*;
import java.util.*;

import javax.swing.*;

public class MyTankGame2 extends JFrame{

MyPanel myPanel= null;

public static void main(String[] args) {
 new MyTankGame2();

}
//构造函数
public MyTankGame2(){
//放置组件
myPanel = new MyPanel();
//启动线程
Thread thread  = new Thread(myPanel);
thread.start();
this.add(myPanel);
//注册监听
this.addKeyListener(myPanel);
//设置窗口属性
this.setBounds(100,100,400,300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
}
}

class MyPanel extends Panel implements KeyListener,Runnable{
Hero hero=null;

Vector<Enermys> ens = new Vector<Enermys>();
int ensSize = 3;
public MyPanel(){
//new出来一个我的坦克
hero = new Hero(150,240);
//造出三个坦克
for (int i = 0; i < ensSize; i++) {
Enermys en = new Enermys(50*i, 0);
ens.add(en);
}
}

public void paint(Graphics g){
super.paint(g);
//这个0,0是MyPanel的左上点的坐标300,400分别是长和宽
g.fillRect(0,0, 400, 300);
//hero.getX(),hero.getY(),是坦克的开始位置,获得构造函数里的数据
this.paintTank(hero.getX(),hero.getY(), g, this.hero.direct, 0);

//画出自己子弹
if (hero.bullet!=null) {
g.fill3DRect(hero.bullet.x, hero.bullet.y, 1, 1,false);
}
for (int i = 0; i < ens.size(); i++) {
this.paintTank(ens.get(i).getX(), ens.get(i).getY(), g, 2, 1);
}

}

public void paintTank(int x,int y,Graphics g,int direct,int type){
switch (type) {
case 0:
g.setColor(Color.YELLOW);
break;
case 1:
g.setColor(Color.CYAN);
break;
}

switch (direct) {

case 0:
//向上
//左边的矩形
g.fill3DRect(x, y, 5, 30, false);
//右边的矩形
g.fill3DRect(x+15, y, 5, 30, false);
//换中间的矩形
g.fill3DRect(x+5, y+5, 10, 20, false);
//画那个圆
g.fillOval(x+5, y+10, 10, 10);
//画直线
g.drawLine(x+10, y+15, x+10, y);
break;
case 1:
//向右
//左边的矩形
g.fill3DRect(x, y, 30, 5, false);
//右边的矩形
g.fill3DRect(x, y+15, 30, 5, false);
//换中间的矩形
g.fill3DRect(x+5, y+5, 20, 10, false);
//画那个圆
g.fillOval(x+10, y+5, 10, 10);
//画直线
g.drawLine(x+15, y+10, x+30, y+10);
break;
case 2:
//向下
//左边的矩形
g.fill3DRect(x, y, 5, 30, false);
//右边的矩形
g.fill3DRect(x+15, y, 5, 30, false);
//换中间的矩形
g.fill3DRect(x+5, y+5, 10, 20, false);
//画那个圆
g.fillOval(x+5, y+10, 10, 10);
//画直线
g.drawLine(x+10, y+15, x+10, y+30);
break;
case 3:
//向左
//左边的矩形
g.fill3DRect(x, y, 30, 5, false);
//右边的矩形
g.fill3DRect(x, y+15, 30, 5, false);
//换中间的矩形
g.fill3DRect(x+5, y+5, 20, 10, false);
//画那个圆
g.fillOval(x+10, y+5, 10, 10);
//画直线
g.drawLine(x+15, y+10, x, y+10);
break;

}

repaint();

}

@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_W){
this.hero.setDirect(0);
this.hero.moveUp();
 
}else if (e.getKeyCode()==KeyEvent.VK_D) {
this.hero.setDirect(1);
this.hero.moveRight();
 
} else if (e.getKeyCode()==KeyEvent.VK_S) {
this.hero.setDirect(2);
this.hero.moveDown();
 
}else if(e.getKeyCode()==KeyEvent.VK_A) {
this.hero.setDirect(3);
this.hero.moveLeft();
 
}
if(e.getKeyCode()==KeyEvent.VK_J){
this.hero.shotEnermy();
 
}

}

@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub

}

@Override
public void run() {
try {
Thread.sleep(100);
} catch (Exception e) {
e.printStackTrace();
}
 while(true){
 //repaint();
 }

}
}
=============================第二个文件=========================
package com.xiaoming1;




class Bullet implements Runnable{
boolean isLive=true;
int x;
int y;
int direct;
int speed=1;
public Bullet(int x,int y,int direct){
this.x=x;
this.y=y;
this.direct=direct;
}
@Override
public void run() {
while(true){
try {
Thread.sleep(50);
} catch (Exception e) {
e.printStackTrace();
}
switch (direct) {
case 0:
y-=speed;
break;
case 1:
x+=speed;
break;
case 2:
y+=speed;
break;
case 3:
x-=speed;
break;
}
if (x<0||x>400||y<0||y>300) {
isLive=false;
break;
}
}

}


}
class Tank{
//横坐标
int x;
//纵坐标
int y;

//设置速度
int speed = 2;
//设置方向0 是上,1是右 ,2是下,3是左
int direct ;
//设置颜色
int color;
public int getColor() {
return color;
}
public void setColor(int color) {
this.color = color;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
public int getDirect() {
return direct;
}
public void setDirect(int direct) {
this.direct = direct;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
//构造方法
public Tank(int x,int y){
this.x=x;
this.y=y;
}
}
//我的坦克
class Hero extends Tank{
Bullet bullet= null;
public Hero(int x,int y){
super(x, y);
}

public void shotEnermy(){


switch (this.direct) {
case 0:
bullet = new Bullet(x+10,y,0);

break;
case 1:
bullet = new Bullet(x+30,y+10,1);

break;
case 2:
bullet = new Bullet(x+10,y+30,2);

break;
case 3:
bullet = new Bullet(x,y+10,3);

break;
}
Thread t =new Thread(bullet);
t.start();
}
public void moveUp(){
y=y-speed;
}

public void moveRight(){
x=x+speed;
}

public void moveDown(){
y=y+speed;
}

public void moveLeft(){
x=x-speed;
}
}
//敌人坦克
class Enermys extends Tank{
public Enermys(int x,int y){
super(x, y);
}
}
========================================================
没多上分了,大家帮帮忙


Ctrl+Enter 发表
发送
会员评论: