当前位置:  技术问答>java相关

游戏制作中线程的作用

    来源: 互联网  发布时间:2015-05-24

    本文导语:  游戏制作中线程的作用,我现在在游戏开发,但我对线程在其中的作用搞的不是很明白,线程在其中到底有什么作用,尤其是sleep()方法。下面是我的程序段: public void run(){       while(true){          set_position...

游戏制作中线程的作用,我现在在游戏开发,但我对线程在其中的作用搞的不是很明白,线程在其中到底有什么作用,尤其是sleep()方法。下面是我的程序段:
public void run(){
      while(true){
         set_position();//计算它的坐标.
         draw_image();//画方块.
         
         try{
            sleep(sleep_time);
         }catch(InterruptedException e){
            
         }
         
      }
 }

上面的sleep()方法到底起什么作用?请各位高手帮忙

|
sleep(sleep_time)可以理解为小休息一段时间了,呵呵
举个很简单的例子,比如精灵向一个方向移动的时候,通常我们为了
效果更好一点,会在一个方向为精灵准备两幅不同的图片。比如向前走,我们会准备一幅出左脚的图片和一副右脚的图片(如果只有一幅图片的话,那么精灵移动的时候就象在溜冰了,呵呵)
精灵向一个方向移动的时候我们会让这两幅图片交替绘制,这样就产生了走动的效果了。如果我们在交替图片的时候没有sleep(sleep_time);而是直接放在一个while(true){.....}循环,那么图片交替会非常非常快,这个时候的效果
很象黄飞鸿黄师傅的‘佛山无影脚’,呵呵。但是如果加一句sleep(500);那么图片交换的频率就是以半秒为间隔,这样就得到比较正常的效果了

最后sleep的意思是线程休眠的意思,不是很‘小休息’啦

|
其实不用讲得很复杂
此例中是画图,其原理是N个draw_image();//画方块.叠加组成
这样看起就是动态的了,比如一次画一个点,连接起来就是动态的点在运动
如果你要用到多线程,给其它线程执行的机会和时间,比如同时要画很多个动画,//要画很多个运动的点等等
利用sleep(500)方法便可让此线程暂停半秒,执行其它的,如果每个都这样,那么所有的都有机会执行,这便是多线程的好处。
给你个经典的例子:画小球的多线程

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BounceThread
{  public static void main(String[] args)
   {  JFrame frame = new BounceThreadFrame();
      frame.show();
   }
}

class BounceThreadFrame extends JFrame
{  public BounceThreadFrame()
   {  setSize(300, 200);
      setTitle("Bounce");

      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      Container contentPane = getContentPane();
      canvas = new JPanel();
      contentPane.add(canvas, "Center");
      JPanel p = new JPanel();
      addButton(p, "Start",
         new ActionListener()
         {  public void actionPerformed(ActionEvent evt)
            {  Ball b = new Ball(canvas);
               b.start();
            }
         });

      addButton(p, "Close",
         new ActionListener()
         {  public void actionPerformed(ActionEvent evt)
            {  canvas.setVisible(false);
               System.exit(0);
            }
         });
      contentPane.add(p, "South");
   }

   public void addButton(Container c, String title,
      ActionListener a)
   {  JButton b = new JButton(title);
      c.add(b);
      b.addActionListener(a);
   }

   private JPanel canvas;
}

class Ball extends Thread
{  public Ball(JPanel b) { box = b; }

   public void draw()
   {  Graphics g = box.getGraphics();
      g.fillOval(x, y, XSIZE, YSIZE);
      g.dispose();
   }

   public void move()
   {  if (!box.isVisible()) return;
      Graphics g = box.getGraphics();
      g.setXORMode(box.getBackground());
      g.fillOval(x, y, XSIZE, YSIZE);
      x += dx;
      y += dy;
      Dimension d = box.getSize();
      if (x = d.width)
      { x = d.width - XSIZE; dx = -dx; }
      if (y = d.height)
      { y = d.height - YSIZE; dy = -dy; }
      g.fillOval(x, y, XSIZE, YSIZE);
      g.dispose();
   }

   public void run()
   {  try
      {  draw();
         for (int i = 1; i 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 游戏图形制作工具 ScenePainter
  • 关于一个游戏的多个图层的制作
  • 微信游戏打飞机游戏制作(java模拟微信打飞机游戏)
  • windows10玩游戏怎么样?唯一支持DirectX 12的windows
  • 类似于 windows7 下 Purble Pairs 的小游戏 翻一下小游戏
  • 开源游戏联运平台 木火鸟游戏
  • kele8的桌球游戏、打雪仗游戏是用JAVA写的吗?
  • 听说Sun公司网站上有个游戏,用Java开发,是坦克游戏,你可以把自己做的坦克放到网上进行厮杀~
  • android游戏载入的activity跳转到游戏主菜单的activity具体实现
  • 大型多人游戏引擎 DimensioneX
  • 赛车游戏 GlTron
  • 殖民帝国游戏 FreeCol
  • 开源游戏引擎 Bullet Physics Engine
  • 有谁用过java写过游戏?
  • 第一人称射击游戏 Nexuiz
  • 卡通电子游戏 Open Sonic
  • 第一人称射击游戏 Chocolate Doom
  • 2D的空间游戏 XPilot
  • 主题医院游戏 CorsixTH
  • 射击游戏 AssaultCube
  • 终端下的俄罗斯方块游戏 vitetris
  • 粘粘世界游戏 World of Goo
  • Palm推砖块游戏 PopBlocks
  • HTML5塔防游戏


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3