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

📄 map45rotate.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: 斜角地图</a></h1>







全平面的地图是从上往下俯视景物与操作人物,如我们前一个主题所介绍的平面地图,市面上有许多游戏是采斜角方向来
观看景物,这种方式可以制作出类似3D的画面,而使用到的贴图技巧却只有2D而已,而且效果并不差,下图是一个斜角地图的范例:<br>







<img style="width: 516px; height: 271px;" alt="" src="images/map45Rotate-1.jpg"><br>







<br>

这是下一个主题的完成图,我们先看看上图的草地如何制作,其它再如法泡制就可以了;斜角地图是由一个一个的菱形方块所组成,我们如下绘制出一个小图:<br>
<img style="width: 313px; height: 97px;" alt="" src="images/map45Rotate-2.jpg"><br>








<br>







<span class="postbody"></span>
电脑的图档规定都是四方形,所以我们的菱形外的白色区域必须经过处理,让图绘制出来时,白方区域部份变为透明,不同的绘图API处理透明图
的函式并不同,这方面请自行查询,在Java中,如果使用的图片不超过256色,则使用GIF档是个不错的方式,我们只要将GIF档的指定颜包设定为透
明,当图片绘制的时候其背景就是透明的了。 <br>
<br>


拼接地图时,我们将下一个菱形接在左下或右下,如下所示: <br>
<img style="width: 265px; height: 142px;" alt="" src="images/map45Rotate-3.jpg"><br>
<br>

在程式中这并不难作到,只要将图片的贴图位置不断往下平移Height/2,再往左或往右平移Width/2即可,如下所示: <br>
<img style="width: 384px; height: 205px;" alt="" src="images/map45Rotate-4.jpg"><br>
<br>

我们举个实例来说好了,假设我们所使用的图片如下所示,图片是32X16像素大小,下图已经过放大,这样看的比较清楚: <br>
<img style="width: 273px; height: 152px;" alt="" src="images/map45Rotate-5.jpg"><br>
<br>
<br>

其中蓝色部份我们已设定为透明,如果我们将图片加以拼接,就可以出现一小块斜角地图了: <br>
<img style="width: 472px; height: 253px;" alt="" src="images/map45Rotate-6.jpg"><br>
<br>

下图是16X16张小图所拼接出来的斜角地图: <br>
<img style="width: 488px; height: 244px;" alt="" src="images/map45Rotate-7.jpg"><br>
<br>
<ul>
  <li>Map45Rotate.java</li>
</ul>
<pre>package onlyfun.caterpillar.graphics.animation;<br> <br>import java.awt.*; <br>import javax.swing.JApplet; <br> <br>public class Map45Rotate extends JApplet {  <br>    private Image offScreen;  <br> <br>    public void init() { <br>        setBackground(Color.white);   <br> <br>        //取得影像 <br>        MediaTracker mediaTracker = new MediaTracker(this); <br>        Image floor =getImage(getDocumentBase(),"floor.gif");<br>        mediaTracker.addImage(floor,0); <br>      <br>        try { <br>            showStatus("影像载入中(Loading Images)..."); <br>            mediaTracker.waitForAll(); <br>        } <br>        catch(InterruptedException e){<br>            e.printStackTrace();<br>        }<br> <br>        int appletWidth  = getSize().width;    <br>        int appletHeight = getSize().height;  <br>        <br>        //建立次画面 <br>        offScreen = createImage(appletWidth, appletHeight); <br>        Graphics drawOffScreen = offScreen.getGraphics(); <br>      <br>        int halfWidth = floor.getWidth(this) / 2; <br>        int halfHeight = floor.getHeight(this) / 2; <br>        <br>        int startX = appletWidth / 2;<br>        int startY = appletHeight / 8;<br>      <br>        // 绘制地板 <br>        for(int j = 0; j &lt; 15; j++) { <br>            for(int i = 0; i &lt; 15; i++) { <br>                int x = startX - i*halfWidth + j*halfWidth; <br>                int y = startY + i*halfHeight + j*halfHeight; <br>                drawOffScreen.drawImage(floor, x, y,this); <br>            } <br>        }<br>    } <br> <br>    public void paint(Graphics g) { <br>        //将次画面贴到主画面中 <br>        g.drawImage(offScreen,0,0,this); <br>    } <br>}<br></pre>
<br>
<br>







</body>
</html>

⌨️ 快捷键说明

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