设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 3162|回复: 4
打印 上一主题 下一主题

[已经过期] 请教如何拼地图……(Viewport用法?)

[复制链接]
乌有君
跳转到指定楼层
1
乌有君  发表于 2010-12-29 09:13:27 回帖奖励 |倒序浏览 |阅读模式
1星屑
本帖最后由 匿名 于 2010-12-29 09:14 编辑

喵了喵,咱想知道Viewport是怎么工作的,是如何把一张图片分成若干块然后再拼接成地图的
默认系统的Tilemap内置类说明太模糊,完全看不懂,故求详解.

最佳答案

查看完整内容

= =b 我很想直接叫你去看RPG::Sprite的動畫實現方式……animation_set_sprites() 那段很經典。 首先,你要知道其實只是加載了一張位圖,就是那個地圖的 tile 的 bitmap。 其次,你要知道每一個地圖小格其實都是個sprite。 然后,你要明白 sprite 有個 src_rect.set(int x, int y, int width, int height) 方法來剪切顯示位圖的顯示內容。 好了,按照上面所說,一幅地圖,其實就是大量小格拼湊起來的介面。你可以把他當作一幅拼圖 ...

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

2
发表于 2010-12-29 09:13:28 | 只看该作者
本帖最后由 禾西 于 2010-12-29 15:02 编辑

= =b
我很想直接叫你去看RPG::Sprite的動畫實現方式……animation_set_sprites() 那段很經典。
首先,你要知道其實只是加載了一張位圖,就是那個地圖的 tile 的 bitmap。
其次,你要知道每一個地圖小格其實都是個sprite。
然后,你要明白 sprite 有個 src_rect.set(int x, int y, int width, int height) 方法來剪切顯示位圖的顯示內容。

好了,按照上面所說,一幅地圖,其實就是大量小格拼湊起來的介面。你可以把他當作一幅拼圖。反正他們的原理是一樣的。

tilemap 的 update 中其實有一個 loop ,用來調用所有的sprite.update。同理,當你改變 tilemap 的 x 值或者 y 值時,你其實改變了所有內部小sprite的 x 值和 y 值。

地圖數據其實是一個和內部小格等量的array表。他記載了每個小格的屬性和內容,同時,你也可以根據小格在array中的index位置來計算出在實際拼湊中的相對 x 值和相對 y 值。

RM中所謂的多層地圖,實際是多幅地圖的疊加。根據使用的 viewport 的 z 值的不同而產生了不同的高度和覆蓋度。你要知道,在同一個 viewport 中后加入的 sprite 總比先加入的sprite 更“高”。而 viewport 內部的 z 值和 viewport 的 z 值是兩個不同的系統。所以,只要一個調用高 z 值 viewport 的 sprite 總比另一個調用了低 z 值 viewport 的 sprite 高。者就是為甚麼多層 sprite 疊加可以有統一的 z 值調度的原理。

現在來看看 Tilemap 的一些“屬性”。
tileset=(Bitmap bitmap) 作為圖塊的源位圖,每一個小格 sprite 的 bitmap 都指向這裡。
map_data=(Table mapData) 作為地圖小格數據的參照資料。
flash_data=(Table flashData) 是地圖塊閃爍的參照資料,和地圖小格數據數組同尺寸。
priorities=(Table prioritiesData) 是優先度的參照資料,用來確認地圖小格原件的高度。

這是 tilemap 中比較重要的幾個方法。

這是個偽代碼

  1. mapData = [
  2. 0,1,1,1
  3. 1,1,1,0
  4. 0,1,1,0
  5. 0,1,1,1]
  6. sprites = []
  7. tileBitmap = Bitmap.new("tileset.png")
  8. 16.times do |i|
  9.   sprites << Sprite.new()
  10.   sprites[-1].bitmap = tileBitmap
  11.   sprites[-1].src_rect.set(mapData[i]*32, 0, 32, 32)
  12.   sprites[-1].x = (i % 4) * 32
  13.   sprites[-1].y = (i / 4) * 32
  14. end
复制代码
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

Lv3.寻梦者

酱油的

梦石
0
星屑
970
在线时间
2161 小时
注册时间
2007-12-22
帖子
3271

贵宾

3
发表于 2010-12-29 09:53:16 | 只看该作者
究竟是Viewport还是Tilemap....

点评

0.0组合起来怎么拼成一张图的,默认系统就是……  发表于 2010-12-29 11:50
= =如果用 Tilemap 的話,你直接把地圖數據丟進去。如果是自制的話,就是大量的sprite的clip。  发表于 2010-12-29 10:37
只要能拼地图就成……咱也不知道到底是哪个0.0  发表于 2010-12-29 10:21
不做頭像做簽名,看我囧冏有神(多謝山人有情提供 )
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39706
在线时间
7486 小时
注册时间
2009-7-6
帖子
13484

开拓者贵宾

4
发表于 2010-12-29 14:10:03 | 只看该作者
3小时自顶

点评

原来是你发的悬赏。。。  发表于 2010-12-29 22:03
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39706
在线时间
7486 小时
注册时间
2009-7-6
帖子
13484

开拓者贵宾

5
发表于 2010-12-29 15:04:37 | 只看该作者
回复 禾西 的帖子
地圖數據其實是一個和內部小格等量的array表。他記載了每個小格的屬性和內容,同時,你也可以根據小格在array中的index位置來計算出在實際拼湊中的相對 x 值和相對 y 值

其实咱就是要这一句
RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-30 15:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表