讨论一下关于用JAVA作动画的问题? 就是在Applet中两个图片进行碰撞检测。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我不太清楚JAVA画图是怎么画的。。但我这里有需要考虑的问题,一:UPDATE是是对当前的球重新画还是对于怎么图象重新画反正我的意思就是要同步,不是对当前球的检测,要对整个系统的检测。球2的坐标也要是它真实的坐标。 有没有人能帮我看一下一个程序?yulin001122() 有没有兴趣?可能有点长。 import java.awt.*;import java.applet.*;import java.awt.event.*;public class ScrollScreen extends Applet implements Runnable,KeyListener{ int AppletWidth,AppletHeight,ImageWidth,X1,X2,key,X,Y,ImageX,ImageY,ox; Image scrollImage,scrollImage2,OffScreen, UFO,air; Image[] bs=new Image[20]; Thread newThread; Graphics drawOffScreen; MediaTracker MT; ImageSprite plane; BulletSprite[] bullet=new BulletSprite[20]; enemyPlane EP; public void init() { AppletWidth = getSize().width; AppletHeight = getSize().height; MT = new MediaTracker(this); scrollImage = getImage(getDocumentBase(),"Images/scroll.gif"); UFO = getImage(getDocumentBase(),"Images/6.gif"); air = getImage(getDocumentBase(),"Images/AIRPLANE.gif"); for(int i=0;i<20;i++) bs[i] = getImage(getDocumentBase(),"Images/BULLET.gif"); MT.addImage(scrollImage,0); MT.addImage(UFO,0); MT.addImage(air,0); for(int i=0;i<20;i++) MT.addImage(bs[i],0); addKeyListener(this); try { MT.waitForAll(); } catch(InterruptedException E){ } scrollImage2 = createImage(scrollImage.getSource()); ImageWidth = scrollImage.getWidth(this); X1 = 0; X2 = ImageWidth; OffScreen = createImage(AppletWidth,AppletHeight); drawOffScreen = OffScreen.getGraphics(); plane = new ImageSprite(air,this); EP = new enemyPlane(UFO,this); for(int i=0;i<20;i++) bullet[i] = new BulletSprite(bs[i],this,AppletWidth,AppletHeight); } public void start() { newThread = new Thread(this); newThread.start(); } public void stop() { newThread = null; } public void paint(Graphics g) { drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight); drawOffScreen.drawImage(scrollImage,X1,0,this); drawOffScreen.drawImage(scrollImage2,X2,0,this); plane.paintSprite(drawOffScreen,this); //EP.paintSprite(drawOffScreen,this); for(int i=0;i<20;i++) bullet[i].paintSprite(drawOffScreen,this); EP.paintSprite(drawOffScreen,this); g.drawImage(OffScreen,0,0,this); } public void update(Graphics g) { paint(g); } public void run() { while(newThread != null) { repaint(); try { Thread.sleep(10); } catch(InterruptedException E){ } EP.updateState(); for(int i=0;i<20;i++) bullet[i].updateState(EP); if(X1 == - AppletWidth) { X1 = - 1; } else { X1--; } if(X2 == 0) { X2 = ImageWidth - 1; } else { X2--; } if((bullet[0].X+getWidth()>=EP.getX())&&(bullet[0].Y+bullet[0].getHeight()>=EP.getY())&&(EP.getX()+EP.getWidth()>=bullet[0].X)&&(EP.getY()+EP.getHeight()>=bullet[0].Y)) { bullet[0].setVisible(false); bullet[0].setMove(false); EP.setVisible(false); } } } public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} public void keyPressed(KeyEvent e) { key=e.getKeyCode(); if(key==e.VK_RIGHT) { plane.X+=3; } if(key==e.VK_LEFT) { plane.X-=3; } if(key==e.VK_UP) { plane.Y-=3; } if(key==e.VK_DOWN) { plane.Y+=3; } if(key==e.VK_SPACE) { if(ox==19) { bullet[ox].setLocation(plane.X+60,plane.Y+40); bullet[ox].setVisible(true); bullet[ox].setMove(true); ox=0; } else { bullet[ox].setLocation(plane.X+60,plane.Y+40); bullet[ox].setVisible(true); bullet[ox].setMove(true); ox++; } } } } class enemyPlane { int X=450,Y=50,width,height; boolean visible,active; Image SpriteImage; Applet Game; public enemyPlane(Image SpriteImage,Applet Game) { this.SpriteImage = SpriteImage; this.Game = Game; setLocation(450,50); setVisible(true); setMove(true); } public int getX() { return X; } public int getY() { return Y; } public void setLocation(int X,int Y) { this.X = X; this.Y = Y; } public int getWidth() { return width; } public int getHeight() { return height; } public void setSize(int width,int height) { this.width = width; this.height = height; } public boolean canVisible() { return visible; } public void setVisible(boolean v) { visible = v; } public boolean canMove() { return active; } public void setMove(boolean m) { active = m; } public void updateState() { X-=1; } public void paintSprite(Graphics g,Applet Game) { if(visible == true) g.drawImage(SpriteImage,450,50,Game); }}class BulletSprite { int X,Y,width,height; boolean visible,active; int AppletWidth,AppletHeight; Image SpriteImage; public BulletSprite(Image bullet,Applet Game,int AppletWidth,int AppletHeight) { this.SpriteImage = bullet; this.AppletWidth = AppletWidth; this.AppletHeight = AppletHeight; setVisible(false); setMove(false); } public int getX() { return X; } public int getY() { return Y; } public void setLocation(int X,int Y) { this.X = X; this.Y = Y; } public int getWidth() { return width; } public int getHeight() { return height; } public void setSize(int width,int height) { this.width = width; this.height = height; } public boolean canVisible() { return visible; } public void setVisible(boolean v) { visible = v; } public boolean canMove() { return active; } public void setMove(boolean m) { active = m; } public void updateState(enemyPlane ep) { if(active == true) { if(X > AppletWidth) { setVisible(false); setMove(false); } else X = X + 10; } if((X+width>=ep.getX())&&(Y+height>=ep.getY())&&(ep.getX()+ep.getWidth()>=X)&&(ep.getY()+ep.getHeight()>=Y)) { setVisible(false); setMove(false); ep.setVisible(false); } } public void paintSprite(Graphics g,Applet Game) { if(visible == true) g.drawImage(SpriteImage,X,Y,Game); }}class ImageSprite { int X,Y,width,height; boolean visible,active; Image SpriteImage; Applet Game; public ImageSprite(Image SpriteImage,Applet Game) { this.SpriteImage = SpriteImage; this.Game = Game; setLocation(0,0); setVisible(true); setMove(true); } public void updateState() { } public void paintSprite(Graphics g,Applet Game) { if(visible == true) g.drawImage(SpriteImage,X,Y,Game); } public int getX() { return X; } public int getY() { return Y; } public void setLocation(int X,int Y) { this.X = X; this.Y = Y; } public int getWidth() { return width; } public int getHeight() { return height; } public void setSize(int width,int height) { this.width = width; this.height = height; } public boolean canVisible() { return visible; } public void setVisible(boolean v) { visible = v; } public boolean canMove() { return active; } public void setMove(boolean m) { active = m; }} 我觉得太长了。希望有同志能copy过去帮我看看。先谢过了。 因为我这里没有java 的运行环境拉。.所以现在我只能提供你一点应该注意的地方 再说我对JAVA画图没有研究过..所以我的意见你可以作为参考拉。.... Java中的事件处理 有关汉字的asc值 java.lang.NullPointerException 如何获取一个页面的创建和更新时间 Frame的使用出现"未初始化小程序"? JDBC的CLASSPATH设置 sleep()和wait()有什么区别? 提问 关于JMenuItem中的removeAll()方法 问 简单线程 问题! 为什么没有进行碰撞检测? 在resin里面怎么导入struts,resin和struts结合使用稳定吗???
但我这里有需要考虑的问题,
一:UPDATE是是对当前的球重新画还是对于怎么图象重新画
反正我的意思就是要同步,不是对当前球的检测,要对整个系统的检测。球2的坐标也要是它真实的坐标。
import java.applet.*;
import java.awt.event.*;public class ScrollScreen extends Applet implements Runnable,KeyListener
{
int AppletWidth,AppletHeight,ImageWidth,X1,X2,key,X,Y,ImageX,ImageY,ox;
Image scrollImage,scrollImage2,OffScreen, UFO,air;
Image[] bs=new Image[20];
Thread newThread;
Graphics drawOffScreen;
MediaTracker MT; ImageSprite plane;
BulletSprite[] bullet=new BulletSprite[20];
enemyPlane EP; public void init()
{
AppletWidth = getSize().width;
AppletHeight = getSize().height;
MT = new MediaTracker(this);
scrollImage = getImage(getDocumentBase(),"Images/scroll.gif");
UFO = getImage(getDocumentBase(),"Images/6.gif");
air = getImage(getDocumentBase(),"Images/AIRPLANE.gif");
for(int i=0;i<20;i++)
bs[i] = getImage(getDocumentBase(),"Images/BULLET.gif"); MT.addImage(scrollImage,0);
MT.addImage(UFO,0);
MT.addImage(air,0);
for(int i=0;i<20;i++)
MT.addImage(bs[i],0); addKeyListener(this); try
{
MT.waitForAll();
}
catch(InterruptedException E){ } scrollImage2 = createImage(scrollImage.getSource()); ImageWidth = scrollImage.getWidth(this); X1 = 0;
X2 = ImageWidth;
OffScreen = createImage(AppletWidth,AppletHeight);
drawOffScreen = OffScreen.getGraphics(); plane = new ImageSprite(air,this);
EP = new enemyPlane(UFO,this);
for(int i=0;i<20;i++)
bullet[i] = new BulletSprite(bs[i],this,AppletWidth,AppletHeight); } public void start()
{
newThread = new Thread(this);
newThread.start();
} public void stop()
{
newThread = null;
} public void paint(Graphics g)
{ drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);
drawOffScreen.drawImage(scrollImage,X1,0,this);
drawOffScreen.drawImage(scrollImage2,X2,0,this);
plane.paintSprite(drawOffScreen,this);
//EP.paintSprite(drawOffScreen,this);
for(int i=0;i<20;i++)
bullet[i].paintSprite(drawOffScreen,this);
EP.paintSprite(drawOffScreen,this);
g.drawImage(OffScreen,0,0,this);
} public void update(Graphics g)
{
paint(g);
} public void run()
{
while(newThread != null)
{
repaint(); try
{
Thread.sleep(10);
}
catch(InterruptedException E){ }
EP.updateState(); for(int i=0;i<20;i++)
bullet[i].updateState(EP); if(X1 == - AppletWidth)
{
X1 = - 1;
}
else
{
X1--;
}
if(X2 == 0)
{
X2 = ImageWidth - 1;
}
else
{
X2--;
}
if((bullet[0].X+getWidth()>=EP.getX())&&(bullet[0].Y+bullet[0].getHeight()>=EP.getY())&&(EP.getX()+EP.getWidth()>=bullet[0].X)&&(EP.getY()+EP.getHeight()>=bullet[0].Y))
{
bullet[0].setVisible(false);
bullet[0].setMove(false);
EP.setVisible(false);
}
}
}
public void keyTyped(KeyEvent e){} public void keyReleased(KeyEvent e){} public void keyPressed(KeyEvent e)
{
key=e.getKeyCode();
if(key==e.VK_RIGHT)
{
plane.X+=3;
}
if(key==e.VK_LEFT)
{
plane.X-=3;
}
if(key==e.VK_UP)
{
plane.Y-=3;
}
if(key==e.VK_DOWN)
{
plane.Y+=3;
}
if(key==e.VK_SPACE)
{
if(ox==19)
{
bullet[ox].setLocation(plane.X+60,plane.Y+40);
bullet[ox].setVisible(true);
bullet[ox].setMove(true);
ox=0;
}
else
{
bullet[ox].setLocation(plane.X+60,plane.Y+40);
bullet[ox].setVisible(true);
bullet[ox].setMove(true);
ox++;
}
}
}
}
class enemyPlane
{
int X=450,Y=50,width,height;
boolean visible,active;
Image SpriteImage;
Applet Game;
public enemyPlane(Image SpriteImage,Applet Game)
{
this.SpriteImage = SpriteImage;
this.Game = Game;
setLocation(450,50);
setVisible(true);
setMove(true);
} public int getX()
{
return X;
} public int getY()
{
return Y;
} public void setLocation(int X,int Y)
{
this.X = X;
this.Y = Y;
} public int getWidth()
{
return width;
} public int getHeight()
{
return height;
} public void setSize(int width,int height)
{
this.width = width;
this.height = height;
} public boolean canVisible()
{
return visible;
} public void setVisible(boolean v)
{
visible = v;
} public boolean canMove()
{
return active;
} public void setMove(boolean m)
{
active = m;
} public void updateState()
{
X-=1;
} public void paintSprite(Graphics g,Applet Game)
{
if(visible == true)
g.drawImage(SpriteImage,450,50,Game);
}
}class BulletSprite
{
int X,Y,width,height;
boolean visible,active;
int AppletWidth,AppletHeight;
Image SpriteImage; public BulletSprite(Image bullet,Applet Game,int AppletWidth,int AppletHeight)
{
this.SpriteImage = bullet;
this.AppletWidth = AppletWidth;
this.AppletHeight = AppletHeight; setVisible(false);
setMove(false);
} public int getX()
{
return X;
} public int getY()
{
return Y;
} public void setLocation(int X,int Y)
{
this.X = X;
this.Y = Y;
} public int getWidth()
{
return width;
} public int getHeight()
{
return height;
} public void setSize(int width,int height)
{
this.width = width;
this.height = height;
} public boolean canVisible()
{
return visible;
} public void setVisible(boolean v)
{
visible = v;
} public boolean canMove()
{
return active;
} public void setMove(boolean m)
{
active = m;
} public void updateState(enemyPlane ep)
{
if(active == true)
{
if(X > AppletWidth)
{
setVisible(false);
setMove(false);
}
else
X = X + 10;
}
if((X+width>=ep.getX())&&(Y+height>=ep.getY())&&(ep.getX()+ep.getWidth()>=X)&&(ep.getY()+ep.getHeight()>=Y))
{
setVisible(false);
setMove(false);
ep.setVisible(false);
}
} public void paintSprite(Graphics g,Applet Game)
{
if(visible == true)
g.drawImage(SpriteImage,X,Y,Game);
}
}class ImageSprite
{
int X,Y,width,height;
boolean visible,active;
Image SpriteImage;
Applet Game;
public ImageSprite(Image SpriteImage,Applet Game)
{
this.SpriteImage = SpriteImage;
this.Game = Game;
setLocation(0,0);
setVisible(true);
setMove(true);
} public void updateState()
{
} public void paintSprite(Graphics g,Applet Game)
{
if(visible == true)
g.drawImage(SpriteImage,X,Y,Game);
} public int getX()
{
return X;
} public int getY()
{
return Y;
} public void setLocation(int X,int Y)
{
this.X = X;
this.Y = Y;
} public int getWidth()
{
return width;
} public int getHeight()
{
return height;
} public void setSize(int width,int height)
{
this.width = width;
this.height = height;
} public boolean canVisible()
{
return visible;
} public void setVisible(boolean v)
{
visible = v;
} public boolean canMove()
{
return active;
} public void setMove(boolean m)
{
active = m;
}
}
所以现在我只能提供你一点应该注意的地方 再说我对JAVA画图没有研究过..
所以我的意见你可以作为参考拉。....