免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1716 | 回复: 1
打印 上一主题 下一主题

我的java小程序越来越快啊!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-08-21 21:11 |只看该作者 |倒序浏览
我用JAVA写了个类似于“雷电”的Applet游戏程序,但是越玩越快啊,而且声音播放得很卡,我在游戏主类里只申请了一个新线程,图像得重绘和对象状态得转换及声音得播放都在此线程得run()里,我想问题可能出在这里。想问问大家怎么办?要代码交流得请QQ:284320105 (注明JAVA) 谢谢您得支持!!
麻烦各位解答一下咯,高手们~!!1

  1. import java.awt.*;
  2. import java.util.*;
  3. import java.applet.*;
  4. import java.awt.event.*;

  5.   
  6. public class Airplane extends Applet   //此为游戏主类
  7.         implements Runnable,MouseListener,MouseMotionListener
  8. {
  9.   int       AppletWidth,AppletHeight,ImageWidth,ImageHeight,BackImageWidth,
  10.           mouseX,mouseY,X,Y,X1,X2;
  11.   int       EnemyBulletSpriteNum=0,RocketSpriteNum=0,EnemyNum=0,BulletNum=0;

  12.   Image     scrollImage,scrollImage2,airplane,bullet,enemy,enemybullet,explosion,rocket,OffScreen;
  13.   Random     R;
  14.   Thread     newThread,musicThread;
  15.   Graphics   drawOffScreen;
  16.   MediaTracker MT;
  17.   AudioClip   back,explose;                   //声音

  18.   Thread   EnemyBulletSpriteThread[],RocketSpriteThread[],
  19.               EnemySpriteThread[], airplaneSpriteThread,BulletSpriteThread[];

  20.    
  21.       
  22.   public void init()
  23.   {
  24.       
  25.     addMouseListener(this);         //注册事件处理方法
  26.     addMouseMotionListener(this);   
  27.   
  28.     back     = getAudioClip(getDocumentBase(),"Audios/back.au");
  29.     explose   = getAudioClip(getDocumentBase(),"Audios/explose.wav");


  30.     MT       = new MediaTracker(this);
  31.     R         = new Random();
  32.    
  33.     AppletWidth = getSize().width;
  34.     AppletHeight = getSize().height;
  35.     EnemyBulletSpriteThread =new EnemyBulletSpriteThread[10];
  36.     RocketSpriteThread     =new RocketSpriteThread[10];
  37.     EnemySpriteThread     =new EnemySpriteThread[10];
  38.     BulletSpriteThread     =new BulletSpriteThread[50];
  39.     //使用MediaTracker取得必要图像
  40.    
  41.     scrollImage = getImage(getDocumentBase(),"Images/newback.gif");
  42.     airplane = getImage(getDocumentBase(),"Images/airplane.gif");
  43.     bullet   = getImage(getDocumentBase(),"Images/bullet.gif");
  44.     enemy   = getImage(getDocumentBase(),"Images/enemy.gif");
  45.     enemybullet   = getImage(getDocumentBase(),"Images/enemybullet.gif");
  46.     rocket   = getImage(getDocumentBase(),"Images/rocket.gif");
  47.     explosion= getImage(getDocumentBase(),"Images/explosion.gif");

  48.     MT.addImage(scrollImage,0);
  49.     MT.addImage(airplane,0);
  50.     MT.addImage(bullet,0);
  51.     MT.addImage(enemy,0);
  52.     MT.addImage(enemybullet,0);
  53.     MT.addImage(rocket,0);
  54.     MT.addImage(explosion,0);

  55.     try
  56.     {
  57.       MT.waitForAll();
  58.     }     
  59.     catch(InterruptedException E){ }   //没有进行异常处理
  60.         
  61.     BackImageWidth   = scrollImage.getWidth(this);
  62.     ImageWidth   = airplane.getWidth(this);
  63.     ImageHeight   = airplane.getHeight(this);

  64.     scrollImage2 = createImage(scrollImage.getSource());   //复制滚动画面图像
  65.     X1       = 0;                         //设定scrollImage起始位置
  66.     X2       = BackImageWidth-1;               //设定scrollImage2起始位置


  67.    
  68.     OffScreen     = createImage(AppletWidth,AppletHeight);   //建立次画面
  69.     drawOffScreen = OffScreen.getGraphics();
  70.   }
  71.   
  72.   class PlayMusicThread extends Thread         //+++++++++++++++++
  73.     {
  74.       public void run()
  75.         { /*if(musicThread != null)
  76.           back.loop();*/
  77.         }

  78.     }


  79. public   class ImageSpriteThread extends Thread   //+++++++++++++++++图像SpriteThread类
  80. {

  81.   Applet Game;                 //在绘制图像时会用到
  82. // Airplane parent;                 //+++++++++++++++++++++++
  83.   int   X,Y;   //自身得X,Y,width,height
  84.   int   k=0;     //碰撞图像记时   
  85.   boolean   i=true;           //碰撞标志
  86.   int   aimX,aimY,aimwidth,aimheight; //碰撞对象的X,Y,width,height
  87.   boolean visible,active,collision;
  88.   int width=90;
  89.   int height=40;
  90.   Image SpriteImage,ExplosionImage;           
  91.   
  92.   public int getX()
  93.   {
  94.     return X;
  95.   }

  96.   public int getY()
  97.   {
  98.     return Y;
  99.   }

  100.   public void setLocation(int X,int Y)
  101.   {
  102.     this.X = X;
  103.     this.Y = Y;
  104.   }

  105.   public int getWidth()
  106.   {
  107.     return width;
  108.   }

  109.   public int getHeight()
  110.   {
  111.     return height;
  112.   }

  113.   public void setSize(int width,int height)
  114.   {
  115.     this.width = width;
  116.     this.height = height;
  117.   }
  118.   public void collision(int aimX,int aimY,int aimwidth,int aimheight)   //碰撞检测
  119.   {
  120.    
  121.     if((visible==true)&&(X+width>;=aimX)&&(Y+height>;=aimY)&&(aimX+aimwidth>;=X)&&(aimY+aimheight>;=Y))
  122.       collision=true;
  123.     else
  124.       collision=false;
  125.   }
  126.   public void setCollision(boolean c)     //置碰撞
  127.   {
  128.     collision=c;
  129.     if(collision==true)       //碰撞为真,置为不可见
  130.     {
  131.       setVisible(false);
  132.       setMove(false);
  133.     }
  134.   }
  135.   public boolean canVisible()
  136.   {
  137.     return visible;
  138.   }

  139.   public void setVisible(boolean v)
  140.   {
  141.     visible = v;
  142.   }

  143.   public boolean canMove()
  144.   {
  145.     return active;
  146.   }

  147.   public void setMove(boolean m)
  148.   {
  149.     active = m;
  150.   }

  151.   public ImageSpriteThread(Image SpriteImage,Image ExplosionImage,Applet Game)
  152.   {
  153.     this.SpriteImage   = SpriteImage;
  154.     this.Game       = Game;   
  155.     this.ExplosionImage   = ExplosionImage;   

  156.     setLocation(0,0);           //设定起始位置
  157.     setVisible(true);           //可见
  158.     setMove(true);             //可移动
  159.     start();
  160.   }

  161.   public void run()
  162.   {   paintSprite(drawOffScreen);
  163.       
  164.     try
  165.     {
  166.       while((visible == true)&&(collision==false))
  167.       {
  168.           synchronized(drawOffScreen)
  169.         {
  170.             paintSprite(drawOffScreen);
  171.             try
  172.             {
  173.                     Thread.sleep(33);         //暂停33毫秒
  174.             }
  175.             catch(InterruptedException E){ }
  176.             
  177.         }
  178.       }
  179.     }catch(InterruptedException ex){}
  180.   }
  181.   public void paintSprite(Graphics g) //绘制SpriteThread
  182.   {
  183.       
  184.       g.drawImage(SpriteImage,X,Y,Game);      
  185.           if((this.i==true)&&(collision==true))
  186.             { g.drawImage(ExplosionImage,X+2,Y,Game);
  187.               k++;
  188.               if(k==6)
  189.               this.i=false;
  190.             }
  191.   }
  192. }



  193. public class BulletSpriteThread extends ImageSpriteThread //++++++++++++++++子弹SpriteThread类
  194. {
  195.   int AppletWidth,AppletHeight;
  196.   
  197.   public BulletSpriteThread(Image bullet,Image explosion,Applet Game,int AppletWidth,
  198.               int AppletHeight)
  199.   {
  200.     super(bullet,explosion,Game);           //调用父类的创建方法

  201.   
  202.     this.width=20;
  203.     this.height=10;
  204.     this.AppletWidth = AppletWidth;
  205.     this.AppletHeight = AppletHeight;   
  206.     setVisible(false);
  207.     setMove(false);
  208.     start();
  209.   }
  210.   
  211.   public void run()
  212.   {   paintSprite(drawOffScreen);
  213.       
  214.     try
  215.     {
  216.       while((visible == true)&&(collision==false))
  217.       {

  218.         if(active == true)
  219.         {
  220.           if(X >;AppletWidth)       //当子弹穿过右边界时
  221.             {
  222.               setVisible(false);       //设定子弹Sprite为不可见
  223.               setMove(false);         //设子弹Sprite为不可移动
  224.             }
  225.           else
  226.             X = X+9;           //前进速度
  227.         }
  228.         synchronized(drawOffScreen)
  229.         {
  230.             paintSprite(drawOffScreen);
  231.             try
  232.             {
  233.                     Thread.sleep(33);         //暂停33毫秒
  234.             }
  235.             catch(InterruptedException E){ }
  236.         }
  237.       }
  238.     }catch(InterruptedException ex){}
  239.   }

  240.    
  241.   public void paintSprite(Graphics g)   //绘制子弹Sprite
  242.   {   
  243.       g.drawImage(SpriteImage,X,Y,Game);
  244.       
  245.       if((this.i==true)&&(collision==true))
  246.         {   g.drawImage(ExplosionImage,X+2,Y,Game);
  247.               k++;
  248.             if(k==6)
  249.               this.i=false;
  250.           }
  251.   }

  252. }


  253. public class EnemyBulletSpriteThread extends ImageSpriteThread //++++++++++++++敌机子弹SpriteThread类
  254. {
  255.   int AppletWidth,AppletHeight,seed,initialY,VY,mouseY;
  256.   Random R;
  257.   Thread s =new ImageSpriteThread();
  258.   public EnemyBulletSpriteThread(Image bullet,Image explosion,Applet Game,int AppletWidth,
  259.               int AppletHeight,Random R,int mouseY,ImageSpriteThread s)
  260.   {
  261.     super(bullet,explosion,Game);           //调用父类的创建方法

  262.     this.s=s;
  263.     this.width=30;
  264.     this.AppletWidth = AppletWidth;
  265.     this.AppletHeight = AppletHeight;
  266.     this.R=R;
  267.     this.mouseY=mouseY;
  268.     seed=AppletHeight;
  269.     initialY=R.nextInt(seed);
  270.     setLocation(AppletWidth,initialY);     //初始位置
  271.     start();
  272.   
  273.   }
  274.   
  275.   public void run()
  276.   {   
  277.       paintSprite(drawOffScreen);   
  278.     try
  279.     {
  280.       while( (visible == true)&&(collision==false))
  281.       {
  282.         this.aimX=s.getX();
  283.         this.aimY=s.getY();
  284.         this.aimwidth=s.getWidth();
  285.         this.aimheight=s.getHeight();
  286.         if(s.canVisible()==true)
  287.         {
  288.           collision(aimX, aimY, aimwidth, aimheight);
  289.         if(collision==true)
  290.         {
  291.           s.setCollision(true);     //置被碰撞物collision为真
  292.       
  293.           setVisible(false);
  294.           setMove(false);
  295.         }   
  296.         }
  297.         if(active == true)
  298.         {
  299.         if(X <0)      
  300.         {
  301.           setVisible(false);      
  302.           setMove(false);         
  303.         }
  304.         else
  305.           X = X - 1;
  306.           if(Y+25>;mouseY)       //追踪战机
  307.           VY=-1;
  308.           else if(Y+25<mouseY)
  309.             VY=1;
  310.           else
  311.             VY=0;
  312.           Y=Y+VY;           
  313.         }
  314.         synchronized(drawOffScreen)
  315.         {
  316.             paintSprite(drawOffScreen);
  317.             try
  318.             {
  319.                 Thread.sleep(33);         //暂停33毫秒
  320.             }
  321.             catch(InterruptedException E){ }
  322.               if(EnemyBulletSpriteThread.collision==true)                   //产生爆炸声
  323.                 explose.play();
  324.         }
  325.       }
  326.     } catch(InterruptedException ex){}
  327.   }     
  328.   public void paintSprite(Graphics g) //绘制敌机子弹Sprite
  329.   {     
  330.     g.drawImage(SpriteImage,X,Y,Game);     
  331.           if((this.i==true)&&(collision==true))
  332.           { g.drawImage(ExplosionImage,X-2,Y,Game);   
  333.             k++;               //显示6帧ExplosionImage
  334.             if(k==6)
  335.               this.i=false;
  336.           }
  337.   }
  338. }

  339. public class RocketSpriteThread extends ImageSpriteThread //++++++++++陨石SpriteThread类
  340. {
  341.   int AppletWidth,AppletHeight,seed,initialY,VY,mouseY;
  342.   Random R;
  343.   Thread s =new ImageSpriteThread();   
  344.   public RocketSpriteThread(Image rocket,Image explosion,Applet Game,int AppletWidth,
  345.               int AppletHeight,Random R,int mouseY,ImageSpriteThread s)
  346.   {
  347.     super(rocket,explosion,Game);           //调用父类的创建方法

  348.     this.s=s;
  349.     this.width=30;
  350.     this.AppletWidth = AppletWidth;
  351.     this.AppletHeight = AppletHeight;
  352.     this.R=R;
  353.     this.mouseY=mouseY;
  354.     seed=AppletHeight;
  355.     initialY=R.nextInt(seed);
  356.     setLocation(AppletWidth,initialY);     //初始位置
  357.     start();
  358.   }
  359.   
  360.   public void run()
  361.   {   
  362.       paintSprite(drawOffScreen);   
  363.     try
  364.     {
  365.       while( (visible == true)&&(collision==false))
  366.       {
  367.         this.aimX=s.getX();
  368.         this.aimY=s.getY();
  369.         this.aimwidth=s.getWidth();
  370.         this.aimheight=s.getHeight();
  371.         if(s.canVisible()==true)
  372.         {
  373.           collision(aimX, aimY, aimwidth, aimheight);
  374.         if(collision==true)
  375.         {
  376.           s.setCollision(true);     //置被碰撞物collision为真
  377.       
  378.           setVisible(false);
  379.           setMove(false);
  380.         }   
  381.         }
  382.         if(active == true)
  383.         {
  384.         if(X <0)      
  385.         {
  386.           setVisible(false);      
  387.           setMove(false);      
  388.         }
  389.         else
  390.           X = X - 1;
  391.           if(Y+25>;mouseY)       //追踪战机
  392.           VY=-1;
  393.           else if(Y+25<mouseY)
  394.             VY=1;
  395.           else
  396.             VY=0;
  397.           Y=Y+VY;           
  398.       }
  399.       synchronized(drawOffScreen)
  400.         {
  401.             paintSprite(drawOffScreen);
  402.             try
  403.             {
  404.                     Thread.sleep(33);         //暂停33毫秒
  405.             }
  406.             catch(InterruptedException E){ }
  407.               if(RocketSpriteThread.collision==true)                   //产生爆炸声
  408.                 explose.play();
  409.         }
  410.       }
  411.     } catch(InterruptedException ex){}
  412.   }

  413.   public void paintSprite(Graphics g) //绘制陨石Sprite
  414.   {   
  415.     g.drawImage(SpriteImage,X,Y,Game);   
  416.           if((this.i==true)&&(collision==true))
  417.           { g.drawImage(ExplosionImage,X-2,Y,Game);
  418.             k++;
  419.             if(k==6)
  420.               this.i=false;
  421.          
  422.           }
  423.   }
  424. }

  425. public   class EnemySpriteThread extends ImageSpriteThread //敌机SpriteThread类 ++++++++++++++
  426. {
  427.   int AppletWidth,AppletHeight,seed,initialY,VY,mouseY;
  428.   Random R;
  429.   Thread s =new ImageSpriteThread();
  430.   public EnemySpriteThread(Image enemy,Image explosion,Applet Game,int AppletWidth,
  431.               int AppletHeight,Random R,int mouseY,ImageSpriteThread s)
  432.   {
  433.     super(enemy,explosion,Game);           //调用父类的创建方法

  434.     this.s=s;
  435.     this.width=30;
  436.     this.AppletWidth = AppletWidth;
  437.     this.AppletHeight = AppletHeight;
  438.     this.R=R;
  439.     this.mouseY=mouseY;
  440.     seed=AppletHeight;
  441.     initialY=R.nextInt(seed);
  442.     setLocation(AppletWidth,initialY);     //初始位置
  443.     start();
  444.   
  445.   }
  446.   
  447.   public void run()
  448.   {   paintSprite(drawOffScreen);
  449.   
  450.     try
  451.     {
  452.       while( (visible == true)&&(collision==false))
  453.       {
  454.         this.aimX=s.getX();
  455.         this.aimY=s.getY();
  456.         this.aimwidth=s.getWidth();
  457.         this.aimheight=s.getHeight();
  458.         if(s.canVisible()==true)
  459.         {
  460.           collision(aimX, aimY, aimwidth, aimheight);
  461.         if(collision==true)
  462.         {
  463.           s.setCollision(true);     //置被碰撞物collision为真
  464.       
  465.           setVisible(false);
  466.           setMove(false);
  467.         }   
  468.         }
  469.       if(active == true)
  470.       {
  471.         if(X <0)       //当敌机穿过右边界时
  472.         {
  473.           setVisible(false);       //设定敌机Sprite为不可见
  474.           setMove(false);         //设定敌机Sprite为不可移动
  475.         }
  476.         else
  477.           X = X - 1;
  478.           if(Y+25>;mouseY)       //追踪战机
  479.           VY=-1;
  480.           else if(Y+25<mouseY)
  481.             VY=1;
  482.           else
  483.             VY=0;
  484.           Y=Y+VY;           
  485.       }
  486.       synchronized(drawOffScreen)
  487.         {
  488.             paintSprite(drawOffScreen);
  489.             try
  490.             {
  491.                     Thread.sleep(33);         //暂停33毫秒
  492.             }
  493.             catch(InterruptedException E){ }
  494.               if(EnemySpriteThread.collision==true)                   //产生爆炸声
  495.                 explose.play();
  496.         }
  497.       }
  498.     } catch(InterruptedException ex){}
  499.   }     
  500.                               
  501.   public void paintSprite(Graphics g);
  502.   {   
  503.       
  504.       g.drawImage(SpriteImage,X,Y,Game);
  505.         if((this.i==true)&&(collision==true))
  506.           {   g.drawImage(ExplosionImage,X-2,Y,Game);
  507.             k++;
  508.             if(k==6)
  509.               this.i=false;
  510.          
  511.           }
  512.   }
  513. }                     //+++++++++++++++++++++++++++++++++++++



  514.   airplaneSpriteThread = new ImageSpriteThread(airplane,explosion,this);
  515.       
  516.     EnemyBulletSpriteThread[0]=new EnemyBulletSpriteThread(enemybullet,explosion,this,AppletWidth,AppletHeight,R,mouseY,airplaneSpriteThread);
  517.          
  518.     RocketSpriteThread[0]=new RocketSpriteThread(rocket,explosion,this,AppletWidth,AppletHeight,R,mouseY,airplaneSpriteThread);
  519.    
  520.     EnemySpriteThread[0] =new EnemySpriteThread(enemy,explosion,this,AppletWidth,AppletHeight,R,mouseY,airplaneSpriteThread);
  521.         
  522.     BulletSpriteThread[0] =new BulletSpriteThread(bullet,explosion,this,AppletWidth,AppletHeight);
  523.         
  524.   public void start()             //start()方法
  525.   {
  526.     newThread = new Thread(this);       //建立与启动新线程
  527.     musicThread=new PlayMusicThread();
  528.     musicThread.start();      
  529.     newThread.start();
  530.   
  531.   }

  532.   public void stop()               //stop()方法
  533.   {
  534.     newThread = null;             //将线程设为null
  535.   musicThread=null;
  536.   }

  537.   public void paint(Graphics g)
  538.   {
  539.     //只清除此部分区域的图像
  540.     drawOffScreen.clearRect(0,0,AppletWidth,AppletHeight);
  541.   
  542.               //注意绘制顺序(Z-Order)
  543.   
  544.     drawOffScreen.drawImage(scrollImage,X1,0,this);     //绘制滚动图像
  545.     drawOffScreen.drawImage(scrollImage2,X2,0,this);   
  546.     g.drawImage(OffScreen,0,0,this);         //将次画面贴到主画面上
  547.   }

  548.   public void update(Graphics g)       //update()方法
  549.   {
  550.     paint(g);                   //只单纯调用paint()方法
  551.   }

  552.    
  553.   public void run()
  554.   {
  555.     while(newThread != null)
  556.     {
  557.       repaint();               //重绘图像
  558.         
  559.       try
  560.       {
  561.         Thread.sleep(33);         //暂停33毫秒
  562.       }
  563.       catch(InterruptedException E){ }
  564.                
  565.    
  566.       if(X1 == -BackImageWidth)         //转换图像位置(产生滚动效果)
  567.         X1 = BackImageWidth - 2;
  568.       else
  569.         X1--;
  570.       if(X2 == -BackImageWidth)
  571.         X2 = BackImageWidth - 2;
  572.       else
  573.         X2--;
  574.   Thread curt=Thread.currentThread();           //++++++++++++++++++测试用
  575.       showStatus("Current thread:"+curt);
  576.       
  577.       if((airplaneSpriteThread.canVisible()==true)&&(R.nextInt(250)<1))         // 创建敌机子弹
  578.       {
  579.       if(EnemyBulletSpriteNum<9)
  580.         EnemyBulletSpriteNum++;
  581.       else EnemyBulletSpriteNum=1;
  582.         EnemyBulletSpriteThread[EnemyBulletSpriteNum]=new EnemyBulletSpriteThread(
  583.         enemybullet,explosion,this,AppletWidth,AppletHeight,R,mouseY,airplaneSpriteThread);
  584.          
  585.       }

  586.    
  587.       if((airplaneSpriteThread.canVisible()==true)&&(R.nextInt(190)<1))         // 创建陨石
  588.       {
  589.         if(RocketSpriteNum<9)
  590.         RocketSpriteNum++;
  591.       else RocketSpriteNum=1;
  592.         RocketSpriteThread[RocketSpriteNum]=new RocketSpriteThread(
  593.         rocket,explosion,this,AppletWidth,AppletHeight,R,mouseY,airplaneSpriteThread);
  594.         
  595.       }
  596.       
  597.       if((airplaneSpriteThread.canVisible()==true)&&(R.nextInt(100)<1))         // 创建敌机
  598.       {
  599.       if(EnemyNum<9)
  600.         EnemyNum++;
  601.       else EnemyNum=1;
  602.         EnemySpriteThread[EnemyNum]=new EnemySpriteThread(
  603.         enemy,explosion,this,AppletWidth,AppletHeight,R,mouseY,airplaneSpriteThread);
  604.         
  605.       }            
  606.     }
  607.   }




  608.   //=====实作MouseListener界面=======================================
  609.   public void mouseExited(MouseEvent e){}   //鼠标离开Component
  610.   public void mouseClicked(MouseEvent e)
  611.   {      
  612.     if(BulletNum<49)
  613.         BulletNum++;
  614.       else BulletNum=1;
  615.         BulletSpriteThread[BulletNum]=new BulletSpriteThread(bullet,explosion,this,AppletWidth,AppletHeight);
  616.       
  617.   }
  618.   public void mouseReleased(MouseEvent e){} //鼠标按键放开
  619.   
  620.   public void mouseEntered(MouseEvent e)   //鼠标进入Component
  621.   {
  622.     mouseX = e.getX();
  623.     mouseY = e.getY();

  624.     //设定飞机的边界动作
  625.     if(mouseX < ImageWidth / 2)
  626.       X = ImageWidth / 2;
  627.     else if(mouseX >; AppletWidth - (ImageWidth / 2))
  628.       X = AppletWidth - (ImageWidth / 2);
  629.     else
  630.       X = mouseX;

  631.     if(mouseY < ImageHeight / 2)
  632.       Y = ImageHeight / 2;
  633.     else if(mouseY >; AppletHeight - (ImageHeight / 2))
  634.       Y = AppletHeight - (ImageHeight / 2);
  635.     else
  636.       Y = mouseY;

  637.   
  638.    
  639.     //设定飞机图像的正确位置
  640.     airplaneSpriteThread.setLocation(X - (ImageWidth / 2),Y - (ImageHeight / 2));
  641.   }

  642.   public void mousePressed(MouseEvent e)   //鼠标按键被按下
  643.   {
  644.     if(airplaneSpriteThread.visible==true)
  645.     {
  646.       BulletSpriteThread[BulletNum].setLocation(X+10,Y);
  647.       BulletSpriteThread[BulletNum].setVisible(true);
  648.       BulletSpriteThread[BulletNum].setMove(true);
  649.    
  650.    
  651.     }
  652.   }
  653.   
  654.   //=====实作MouseMotionListener界面=================================
  655.   public void mouseMoved(MouseEvent e)     //鼠标移动时
  656.   {
  657.     //移动飞机
  658.     mouseX = e.getX();
  659.     mouseY = e.getY();

  660.     //设定飞机的边界动作
  661.     if(mouseX < ImageWidth / 2)
  662.       X = ImageWidth / 2;
  663.     else if(mouseX >; AppletWidth - (ImageWidth / 2))
  664.       X = AppletWidth - (ImageWidth / 2);
  665.     else
  666.       X = mouseX;

  667.     if(mouseY < ImageHeight / 2)
  668.       Y = ImageHeight / 2;
  669.     else if(mouseY >; AppletHeight - (ImageHeight / 2))
  670.       Y = AppletHeight - (ImageHeight / 2);
  671.     else
  672.       Y = mouseY;

  673.     //设定飞机图像的正确位置
  674.     airplaneSpriteThread.setLocation(X - (ImageWidth / 2),Y - (ImageHeight / 2));
  675.   }

  676.   public void mouseDragged(MouseEvent e)   //鼠标拖曳时
  677.   {
  678.   }
  679. }
复制代码


//这个是后来改的,但有N多错误,不明白啊

论坛徽章:
0
2 [报告]
发表于 2005-08-22 23:41 |只看该作者

我的java小程序越来越快啊!!!

高手~~
佩服
不好意思来这佩服一阵
我是不会做了
但很有兴趣看看
呵呵
会考下来测试下的
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP