当前位置: 技术问答>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()方法到底起什么作用?请各位高手帮忙
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的意思是线程休眠的意思,不是很‘小休息’啦
举个很简单的例子,比如精灵向一个方向移动的时候,通常我们为了
效果更好一点,会在一个方向为精灵准备两幅不同的图片。比如向前走,我们会准备一幅出左脚的图片和一副右脚的图片(如果只有一幅图片的话,那么精灵移动的时候就象在溜冰了,呵呵)
精灵向一个方向移动的时候我们会让这两幅图片交替绘制,这样就产生了走动的效果了。如果我们在交替图片的时候没有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
此例中是画图,其原理是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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。