⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 framefilemanagement.htm

📁 电脑图学(Computer Graphics)是资料结构、演算法与数学的应用
💻 HTM
字号:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>







  
  
  
  
  
  
  
  <link rel="stylesheet" href="css/stdlayout.css" type="text/css">







  
  
  
  
  
  
  
  <link rel="stylesheet" href="css/print.css" type="text/css">







  
  
  
  
  
  
  
  <meta content="text/html; charset=gb2312" http-equiv="content-type">







  
  
  
  
  
  
  
  <title>画框档案管理</title>
</head>


<body>







<h3><a href="http://caterpillar.onlyfun.net/GossipCN/index.html">From
Gossip@caterpillar</a></h3>







<h1><a href="ComputerGraphics.htm">Computer Graphics:&nbsp;画框档案管理</a></h1>







画框动画只要将所要播放的动画,绘制为一格一格的图像,然后再一个一个载入并绘制在画面上即可,对于一些重覆性的动画,使用画框动画即可表现出不错的效果,藉助3D绘图软体的功能,还可以伪装成3D画面,市面上有许多斜角地图的游戏,都是使用这个方式来制作。<br>
<br>
画框动画的档案在载入时,在这边将之分为三个方式:<br>
<h2>将影格分为个别档案</h2>
例如若影格有20个画面,就将之储存为20个档案并加以编号,这个方法最为简单,且在绘图时只要指定图片索引即可,可以简化程式逻辑并节省运算资源,但缺点就是要管理的档案名称可就多了。<br>
<h2>将影格画为连续的一维影像</h2>
如果影格数少且为连续动作,将之绘制在同一个档案上,在播放时只绘制图档中的某个区域,这必须透过运算来达成,所以在程式逻辑与运算上必须花费一些精神,不过档案管理上会比较方便,例如将所有的影格绘制在下面同一个档案: <br>







<img style="width: 300px; height: 50px;" alt="" src="images/frameFileManagement-1.gif"><br>








<h2>&nbsp;将影格画为连续的二维影像</h2>
如果影格数较多,或是需要一些分类,例如人物的走动,可以将之绘制为二维影像,例如以下的图片: <br>







<span class="postbody"></span><img style="width: 640px; height: 480px;" alt="" src="images/frameFileManagement-2.jpg"><br>
<br>
<br>
人物走动分为上下左右四个方向,使用二维图片管理相当方便:<br>
<img style="width: 108px; height: 186px;" alt="" src="images/frameFileManagement-3.gif"><br>
<br>
下面这个程式示范如何播放二维影像的影格,您可以先看看连结的 <a href="frame.html">动画展示</a>。<br>
<ul>
  <li> FrameAnimation.java
  </li>
</ul>

<pre>package onlyfun.caterpillar.graphics.animation; <br> <br>import java.awt.*; <br>import javax.swing.JApplet;<br> <br>public class FrameAnimation extends JApplet <br>                                        implements Runnable {  <br>    private Image image;<br>    <br>    // 影像来源区域<br>    private int sx = 0;<br>    private int sy = 0;<br> <br>    public void init() {<br>        MediaTracker mediaTracker = new MediaTracker(this); <br>         <br>        image = getImage(getDocumentBase(),"Cg0430.jpg"); <br> <br>        mediaTracker.addImage(image,0); <br> <br>        try { <br>           // 在状态列显示资讯<br>           showStatus("影像载入中...");  <br>           // 等待所有影像下载<br>           mediaTracker.waitForAll();   <br>        } <br>        catch(InterruptedException e){} <br> <br>        setBackground(Color.black);<br>    } <br> <br>    public void start() {   <br>        (new Thread(this)).start(); <br>    } <br> <br>    public void paint(Graphics g)  {<br>        g.drawImage(image, <br>               80,30,208,126,sx,sy,sx+128,sy+96,this);<br>    } <br>    <br>    public void update(Graphics g) { <br>        paint(g); <br>    } <br> <br>    public void run() {                <br>        while(true) { <br>            repaint();                             <br> <br>            // 计算来源区域 <br>            sx += 128; <br>            if(sx == 640) { <br>               sy += 96;<br>               sx = 0;<br>            <br>               if (sy == 480) <br>                  sy = 0; <br>            } <br> <br>            try { <br>                Thread.sleep(100); <br>            } <br>            catch(InterruptedException e){ } <br>        }<br>    }<br>}</pre>
<br>
<br>







</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -