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

Project1

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

求一脚本

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
59
在线时间
31 小时
注册时间
2009-1-30
帖子
207
跳转到指定楼层
1
发表于 2009-3-7 17:50:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
{/hx}想要一VX的近大远小的地图脚本


要求是   1 通过地图 名字进行调用 只用于世界地图
         2 应为我世界地图 为全部回卷的所以不用考虑人物坐标及相应的大小变化
         3 最好在窗口的最上方 能空出一格子 后面我用远景图
         4 设置最上与最下的大小的地方注释下  我再调节{/hx}
         5 {/hx}没有就算了 确实很麻烦=。=
蚊香
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
46
在线时间
10 小时
注册时间
2007-5-27
帖子
2558

第1届Title华丽大赛新人奖

2
发表于 2009-3-8 05:03:08 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
59
在线时间
31 小时
注册时间
2009-1-30
帖子
207
3
 楼主| 发表于 2009-3-13 01:07:09 | 只看该作者
{/fd}{/fd}ip被禁了?
www.rpgrevolution.com{/fd}吗  貌似我能进去{/fd}



{/cy}哈哈找到了 效果不错
蚊香
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2009-3-11
帖子
19
4
发表于 2009-3-13 01:44:04 | 只看该作者
我怎么找不到?能给个连接或上传上来,给我下载把!!!
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
59
在线时间
31 小时
注册时间
2009-1-30
帖子
207
5
 楼主| 发表于 2009-3-13 02:10:10 | 只看该作者
刚才在查看 貌似Z坐标上还要修改  元件缩放没问题 但地图上 跟人物一样的元件或高于人物的元件会悬空   高于人物倒无所谓 就根人物一样的就飞起来了= =!
http://www.rpgrevolution.com/forums/index.php?showtopic=25727&hl=mode7这是地址
蚊香
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
59
在线时间
31 小时
注册时间
2009-1-30
帖子
207
6
 楼主| 发表于 2009-3-13 02:19:02 | 只看该作者
{/cy}用代理弄来了

  1. module Game
  2.   #ゲーム画面の定義
  3.   DISPLAY_WIDTH = 544
  4.   DISPLAY_HEIGHT = 416
  5.   
  6.   #縦横チップ数の定義
  7.   DISPLAY_CHIP_WIDTH = DISPLAY_WIDTH / 32
  8.   DISPLAY_CHIP_HEIGHT = DISPLAY_HEIGHT / 32
  9.   
  10.   #実座標の定義(よくわからないがマップ座標 * 256が定義らしい)
  11.   DISPLAY_REAL_WIDTH = DISPLAY_CHIP_WIDTH * 256
  12.   DISPLAY_REAL_HEIGHT = DISPLAY_CHIP_HEIGHT * 256
  13.   
  14. end

  15. #記述ルール

  16.   #定義済みの処理への追加(元の処理を損ねない)
  17.   #--------------------------------------------------------------------------
  18.   # ● 処理
  19.   #--------------------------------------------------------------------------

  20.   #定義済みの処理を上書きする変更
  21.   #--------------------------------------------------------------------------
  22.   # ● 処理 (上書き)
  23.   #--------------------------------------------------------------------------

  24.   #新規処理
  25.   #--------------------------------------------------------------------------
  26.   # ○ 処理
  27.   #--------------------------------------------------------------------------
复制代码


定数定義

  1. #タイルを並べられる
  2. class Rect
  3.   def set_pos(x, y)
  4.     self.x = x
  5.     self.y = y
  6.   end

  7.   def set_size(w, h)
  8.     self.width = w
  9.     self.height = h
  10.   end  
  11. end



  12. #==============================================================================
  13. # ■ TileBitmap
  14. #------------------------------------------------------------------------------
  15. #  
  16. #==============================================================================
  17. class TileBitmap < Bitmap
  18.   def initialize(width, height, tilemap)
  19.     super(width, height)
  20.     @tilemap = tilemap
  21.     @map_width = width / 32
  22.     @map_height = height / 32
  23.     @buffer = Bitmap.new(width, height)
  24.     @map_x = 999
  25.     @map_y = 999
  26.     @anime_face = 0
  27.     @anime_face_x = 0
  28.     @anime_speed = 30
  29.     @anime_count = @anime_speed
  30.     @main_autotile = MainAutotile.new(self, @tilemap.bitmaps)
  31.     @temprect = Rect.new(0,0,32,32)
  32.     @range = -1..1
  33.   end
  34.   
  35.   #--------------------------------------------------------------------------
  36.   def dispose
  37.     @buffer.dispose
  38.     @main_autotile.dispose
  39.     super
  40.   end

  41. #--------------------------------------------------------------------------
  42.   def set_tile(id, dx, dy)
  43.     case id
  44.       when 2048...2816
  45.         set_auto_tile1(id - 2048, dx, dy)
  46.       when 2816...4352
  47.         chipid, atid = (id -2816).divmod(48)
  48.         @main_autotile.draw(1,
  49.           atid, (chipid & 7) << 6 , (chipid >> 3) * 96, dx, dy, chipid)
  50.       when 4352...5888
  51.         set_auto_tile2(@tilemap.bitmaps[2], id - 4352, dx, dy)
  52.       when 5888...8000
  53.         set_auto_tile2(@tilemap.bitmaps[3], id - 5888, dx, dy)
  54.       when 1536...2048
  55.         set_normal_tile(@tilemap.bitmaps[4], id - 1536, dx, dy)
  56.       when 1...256
  57.         #0は書き込まない
  58.         set_normal_tile(@tilemap.bitmaps[5], id, dx, dy)
  59.       when 256...512
  60.         set_normal_tile(@tilemap.bitmaps[6], id - 256, dx, dy)
  61.       when 512...768
  62.         set_normal_tile(@tilemap.bitmaps[7], id - 512, dx, dy)
  63.       when 768...1536
  64.         set_normal_tile(@tilemap.bitmaps[8], id - 768, dx, dy)
  65.     end
  66.   end
  67.   
  68. #--------------------------------------------------------------------------
  69.   def set_normal_tile(bitmap, id, dx, dy)
  70.     if(id < 128)
  71.       @temprect.set((id & 7) << 5, id >> 3 << 5, 32, 32)
  72.     else
  73.       id = id - 128
  74.       @temprect.set(((id & 7) + 8) << 5, id >> 3  << 5, 32, 32)
  75.     end
  76.     blt(dx, dy, bitmap, @temprect)
  77.   end

  78. #--------------------------------------------------------------------------
  79.   def set_auto_tile1(id, dx, dy)
  80.     chip_id, atid = id.divmod(48)

  81.     f = @anime_face
  82.     fx = @anime_face_x
  83.     case chip_id
  84.       when 0
  85.         @main_autotile.draw(0, atid, fx, 0, dx, dy, f)
  86.       when 1
  87.         @main_autotile.draw(0, atid, fx, 96, dx, dy, 8 + f)
  88.       when 2
  89.         @main_autotile.draw(0, atid, 192, 0, dx, dy, 3)
  90. #        blt(dx, dy, @tilemap.bitmaps[0], Rect.new(192, 0, 32, 32))
  91.       when 3
  92.         blt(dx, dy, @tilemap.bitmaps[0], Rect.new(192, 96, 32, 32))
  93.       when 4
  94.         @main_autotile.draw(0, atid, 256 + fx, 0, dx, dy, f + 4)
  95.       when 6
  96.         @main_autotile.draw(0, atid, 256 + fx, 96, dx, dy, f + 12)
  97.       when 8
  98.         @main_autotile.draw(0, atid, fx, 192, dx, dy, f + 16)
  99.       when 10
  100.         @main_autotile.draw(0, atid, fx, 288, dx, dy, f + 20)
  101.       when 12
  102.         @main_autotile.draw(0, atid, 256 + fx, 192, dx, dy, f + 24)
  103.       when 14
  104.         @main_autotile.draw(0, atid, 256 + fx, 288, dx, dy, f + 28)
  105.     end
  106.    
  107.   end
  108.   
  109.   #--------------------------------------------------------------------------
  110.   # アニメーションタイルであればtrueを返す
  111.   # Params: tile_id タイル番号
  112.   # Return: アニメーションタイルであればTrue
  113.   #--------------------------------------------------------------------------
  114.   def anime_tile? (tile_id)
  115.     return tile_id && tile_id.between?(2048, 2815)
  116.   end
  117.   
  118.   #--------------------------------------------------------------------------
  119.   def set_auto_tile2(bitmap, id, dx, dy)
  120.     #オートタイルID
  121.     autotile_id = id % 48
  122.    
  123.     #仮に八分割して表示
  124.     real = id  / 48
  125.     @temprect.set((real & 7) << 5, real >> 3 << 5, 32, 32)
  126.     blt(dx, dy, bitmap, @temprect)
  127.   end

  128.   #--------------------------------------------------------------------------
  129.   # マップ上の座標からマップをセット
  130.   #--------------------------------------------------------------------------
  131.   def set_map(ox, oy)
  132.     return update_anime(ox, oy) if @map_x == ox && @map_y == oy

  133.     #誤差が1の時はバッファからマップをコピー、不足分のみ描画する
  134.     #このときアニメカウント0ならアニメを更新する
  135.     dir_x = ox - @map_x
  136.     dir_y = oy - @map_y
  137.     update_anime(ox - dir_x, oy - dir_y)
  138.     #ループの考慮なし
  139.     #マップWとdirxの絶対値が同じなら+ならー1ーなら1にする
  140.     if @range === dir_x && @range === dir_y
  141.       case
  142.         when dir_x.zero? && dir_y == -1
  143.           copy_from_buffer(Rect.new(0, 0, width, height - 32), 0, 32)
  144.           #上端の一列を描く
  145.           draw_map(0, 0, ox, oy,
  146.             ox + @map_width, oy + 1)
  147.         when dir_x.zero? && dir_y == 1
  148.           copy_from_buffer(Rect.new(0, 32, width, height - 32), 0, 0)
  149.           #下端の一列を描く
  150.           draw_map(0, height - 32, ox, oy + @map_height - 1,
  151.             ox + @map_width, oy + @map_height)
  152.         when dir_y.zero? && dir_x == -1
  153.           copy_from_buffer(Rect.new(0, 0, width - 32, height), 32, 0)
  154.           #左端の一列を描く
  155.           draw_map(0, 0, ox, oy,
  156.             ox + 1, oy + @map_height)
  157.         when dir_y.zero? && dir_x == 1
  158.           copy_from_buffer(Rect.new(32, 0, width - 32, height), 0, 0)
  159.           #右端の一列を描く
  160.           draw_map(width - 32, 0, ox + @map_width - 1, oy,
  161.             ox + @map_width, oy + @map_height)

  162. #        when dir_y = -1 && dir_x = -1
  163. #        when dir_y = -1 && dir_x = 1
  164. #        when dir_y = 1 && dir_x = -1
  165. #        when dir_y = 1 && dir_x = 1
  166.       end
  167.       
  168.     else
  169.       #全描画
  170.       #アニメカウントを考慮すること
  171.       clear
  172.       draw_map(0, 0, ox, oy, ox + @map_width, oy + @map_height)
  173.     end
  174.     @map_x = ox
  175.     @map_y = oy
  176.     return true
  177.   end
  178.   
  179.   def next_anime_face
  180.     @anime_face = (@anime_face + 1) % 3
  181.     @anime_face_x = @anime_face << 6
  182.   end
  183.   
  184.   
  185.   #--------------------------------------------------------------------------
  186.   # バッファからコピー
  187.   #ox,oy 左上の座標(関数内で画面外補正をかける)
  188.   #--------------------------------------------------------------------------
  189.   def update_anime(ox, oy)
  190.     if @anime_count.zero?
  191.       next_anime_face

  192.       x = y = dx = dy = 0
  193.       data = $game_map.data
  194.       map_each(ox+3, oy, ox + @map_width-3, oy + @map_height) do |x, y, dx, dy|
  195.         #レイヤー1のアニメタイルはアニメタイルの上にある
  196.         #レイヤー2にアニメタイルは無い
  197.         #よって0のみチェックすればよい
  198.         if anime_tile?(data[x, y, 0])
  199.           for z in 0..2
  200.             tile_id = data[x, y, z]
  201.             set_tile(tile_id, 96 + dx, dy) if tile_id
  202.           end
  203.         end
  204.       end   
  205.       
  206.       @anime_count = @anime_speed
  207.       return true
  208.     else
  209.       @anime_count -= 1
  210.       return false
  211.     end
  212.   end
  213.   
  214.   #--------------------------------------------------------------------------
  215.   # バッファからコピー
  216.   #--------------------------------------------------------------------------
  217.   def copy_from_buffer(r,  bx, by)
  218.     @buffer.clear
  219.     @buffer.blt(0, 0, self, self.rect)

  220.     clear
  221.     blt(bx, by, @buffer, r)
  222.   end

  223.   #--------------------------------------------------------------------------
  224.   def draw_map(tox, toy, ox, oy, xmax, ymax)
  225.     data = $game_map.data
  226.     x = y = dx = dy = 0
  227.     map_each(ox, oy, xmax, ymax) do |x, y, dx, dy|
  228.       for z in 0..2
  229.         tile_id = data[x, y, z]
  230.         set_tile(tile_id, tox + dx, toy + dy) if tile_id
  231.       end
  232.     end
  233.   end
  234.   
  235.   #--------------------------------------------------------------------------
  236.   # マップの特定箇所に対して処理を行う
  237.   # z軸については考慮しないため処理ブロック側で実装のこと
  238.   # Params:
  239.   #   sx start_x
  240.   #   sy start_y
  241.   #   ex end_x
  242.   #   ey end_y
  243.   # Yield: |x, y, dx, dy| マップのx,y、0から数えた描画先のx,y
  244.   #--------------------------------------------------------------------------
  245.   def map_each(sx, sy, ex, ey)
  246.     mapw = $game_map.width
  247.     maph = $game_map.height
  248.     isv = $game_map.loop_vertical?
  249.     ish = $game_map.loop_horizontal?
  250.     draw_y = 0
  251.     for y in sy...ey
  252.       y = get_looped_point(y, maph) if isv
  253.       draw_x = 0
  254.       for x in sx...ex
  255.         x = get_looped_point(x, mapw) if ish
  256.         yield(x, y, draw_x, draw_y)
  257.         draw_x += 32
  258.       end
  259.       draw_y += 32
  260.     end   
  261.   end
  262.   
  263.   #ループを考慮して座標を取得(x,y対応)
  264.   #val 現在位置  size マップサイズ
  265. #--------------------------------------------------------------------------
  266.   def get_looped_point(val, size)
  267.     return case
  268.       when size <= val then val -= size
  269.       when val < 0 then val += size
  270.       else val
  271.     end
  272.   end
  273. end

复制代码


TileBitmap

  1. class TileSprite < Sprite
  2.   def initialize(width, height, tilemap, viewport)
  3.     super(viewport)
  4.     self.bitmap = Bitmap.new(Game::DISPLAY_WIDTH, Game::DISPLAY_HEIGHT)
  5.     self.x = 0
  6.     self.y = 0
  7.     self.ox = 0
  8.     self.oy = 0
  9.     self.z = 0
  10.     @backbuffer = TileBitmap.new(width, height, tilemap)
  11.     @bg = Sprite.new(viewport)
  12.     @bg.z = 1
  13.     @bg.blend_type = 1
  14.     @bg.bitmap = Cache.picture('bg')
  15.    
  16.     @mapx = -999
  17.     @mapy = -999

  18.     @x_plus = (width - Game::DISPLAY_WIDTH) / 2
  19.     @y_plus =  128 #(height - Game::DISPLAY_HEIGHT) / 2
  20.    
  21.     @draw_count = false
  22.    
  23.     @x_table = Table.new(416)
  24.     @y_table = Table.new(416)
  25.     set_render_table(45)
  26.   end

  27.   def dispose
  28.     @bg.dispose if @bg
  29.     @backbuffer.dispose if @backbuffer
  30.     self.bitmap.dispose if self.bitmap
  31.     super
  32.   end
  33.   
  34.   def hide
  35.     self.visible = false
  36.     @bg.visible = false
  37.   end
  38.   
  39.   def show
  40.     self.visible = true
  41.     @bg.visible = true
  42.   end
  43.   

  44.   def set_render_table(angle)
  45.     return false if angle == @angle
  46.     @angle = angle
  47.     d = 400.0
  48.     rad = angle *  Math::PI / 180
  49.     sina = Math.sin(rad)
  50.     cosa = Math.cos(rad)

  51.     x_zoom = 272 * 1.5
  52.     for i in 0...416

  53.       sy = 208 - i

  54.       unless angle == 90
  55.         aaa = sy == 0 ? 0: (90 - angle) / 208.0 * sy
  56.         aaa = sy < 0 ? 90 + aaa : 90 - aaa
  57.         rad = aaa *  Math::PI / 180
  58.         sy = (sy / Math.sin(rad)) * (d + (sy * Math.cos(rad))) / d
  59.       end
  60.    
  61.       
  62.       to_y = sina.zero? ? -256: ((sy / sina) * (d + (sy * cosa)) / d).round
  63.       #to_y = sina.zero? ? -256: ((sy / sina) * (d + (sy * cosa)) / d).round
  64.       @y_table[i] = 208 - to_y

  65.       #y=1のときのx
  66.       to_x = (-x_zoom * (d + (sy * -cosa)) / d) + x_zoom
  67.       @x_table[i] = - (272 * to_x / (272 - to_x )).round
  68.     end
  69.    
  70.     #一応bgのサイズもかえとく
  71.     #90が0で45が100
  72.     case @angle
  73.       when 45
  74.         @bg.zoom_y = 1.0
  75.       when 90
  76.         @bg.zoom_y = 0.0
  77.       else  
  78.         @bg.zoom_y = (1.0 / 45) * (90 - @angle)
  79.       end
  80.       @bg.opacity = 255 * @bg.zoom_y
  81.     return true  
  82.   end


  83.   
  84.   #マップ上の座標で設定
  85.   def update_map(ox, oy)
  86.     return unless self.visible

  87.     aox = ($game_map.display_x >> 3 & 31) + @x_plus
  88.     aoy = ($game_map.display_y >> 3 & 31) + @y_plus

  89.     ud = set_render_table($game_map.get_angle)
  90.     sd = @backbuffer.set_map(ox, oy)
  91.     return if !sd && !ud && aox == @mapx && aoy == @mapy
  92.     update_bitmap(aox, aoy)
  93.   end
  94.   
  95.   def update_bitmap(aox, aoy)
  96.     @mapx = aox
  97.     @mapy = aoy

  98.     unless aox == @x_plus && aoy == @y_plus
  99.       @draw_count = !@draw_count
  100.       return if @draw_count
  101.    end
  102.    
  103.     bmp = self.bitmap
  104.     bmp.clear

  105.     bmph = bmp.height
  106.     bmpw = bmp.width
  107.    
  108.     yt = @y_table
  109.     xt = @x_table
  110.     bb = @backbuffer
  111.     from_r = Rect.new(0, 0, 1 , 1)
  112.     to_r = Rect.new(0, 0, bmpw, 1)
  113.     i = 0
  114.     while i < bmph
  115.       to_y = yt[i]
  116.       if to_y < -@y_plus
  117.         i += 1
  118.         next
  119.       end
  120.         
  121.       to_x = xt[i]
  122.       to_r.y = i
  123.       
  124.       ww = 0
  125.       while i < bmph
  126.         ww += 1
  127.         i += 1
  128.         break unless to_x == xt[i] && to_y + ww == yt[i]
  129.       end
  130.       
  131.         
  132.       to_r.height = ww
  133.       from_r.set(to_x + aox, to_y + aoy, bmpw - to_x - to_x, ww)
  134.       bmp.stretch_blt(to_r, bb, from_r)
  135.     end
  136.   end
  137.   
  138.   
  139. end

  140. class Game_Map
  141.   #--------------------------------------------------------------------------
  142.   # ● 公開インスタンス変数
  143.   #--------------------------------------------------------------------------
  144.   attr_accessor   :mode3D

  145.   #--------------------------------------------------------------------------
  146.   # ● オブジェクト初期化
  147.   #--------------------------------------------------------------------------
  148.   alias a9_003_initialize initialize
  149.   def initialize
  150.     a9_003_initialize
  151.     @mode3D = false
  152.     @angle3D = 45
  153.   end
  154.   
  155.   #--------------------------------------------------------------------------
  156.   def set_angle(v)
  157.     @angle3D = v
  158.   end
  159.   
  160.   #--------------------------------------------------------------------------
  161.   def get_angle
  162.     @angle3D
  163.   end
  164.   
  165. end

  166. class Spriteset_Map

  167.   #--------------------------------------------------------------------------
  168.   # ● ビューポートの作成
  169.   #--------------------------------------------------------------------------
  170.   alias a9_003_create_viewports create_viewports
  171.   def create_viewports
  172.     a9_003_create_viewports
  173.     @viewport_invisible = Viewport.new(0, 0, 1, 1)
  174.     @viewport_invisible.visible = false
  175.   end
  176.   
  177.   #--------------------------------------------------------------------------
  178.   # ● ビューポートの解放
  179.   #--------------------------------------------------------------------------
  180.   alias a9_003_dispose_viewports dispose_viewports
  181.   def dispose_viewports
  182.     a9_003_dispose_viewports
  183.    
  184.     @viewport_invisible.dispose
  185.   end
  186.   #--------------------------------------------------------------------------
  187.   # ● タイルマップの作成
  188.   #--------------------------------------------------------------------------
  189.   alias a9_003_create_tilemap create_tilemap
  190.   def create_tilemap
  191.     a9_003_create_tilemap
  192.     @tilemap.visible = false
  193.     @tile_sprite = TileSprite.new(544+448, 416+128, @tilemap, @viewport1)
  194.     end_3d
  195.   end
  196.   
  197.   #--------------------------------------------------------------------------
  198.   def begin_3d
  199.     @tilemap.viewport = @viewport_invisible
  200.     @mode3d = true
  201.     @tile_sprite.show
  202.   end

  203.   #--------------------------------------------------------------------------
  204.   def end_3d
  205.     @tilemap.viewport = @viewport1
  206.     @mode3d = false
  207.     @tile_sprite.hide
  208.   end

  209.   
  210.   #--------------------------------------------------------------------------
  211.   # ● タイルマップの解放
  212.   #--------------------------------------------------------------------------
  213.   alias a9_003_dispose_tilemap dispose_tilemap
  214.   def dispose_tilemap
  215.     a9_003_dispose_tilemap
  216.     @tile_sprite.dispose
  217.   end


  218.   #--------------------------------------------------------------------------
  219.   # ● タイルマップの更新
  220.   #--------------------------------------------------------------------------
  221.   alias a9_003update_tilemap update_tilemap
  222.   def update_tilemap
  223.     g = $game_map
  224.     unless g.mode3D == @mode3d
  225.       @mode3d ? end_3d: begin_3d
  226.     end
  227.     unless @mode3d
  228.       a9_003update_tilemap
  229.     else
  230.       @tile_sprite.update_map((g.display_x >> 8) - 7, (g.display_y >> 8) - 4)
  231.     end
  232.   end
  233. end

  234. #==============================================================================
  235. # ■ Game_Vehicle
  236. #------------------------------------------------------------------------------
  237. #  乗り物を扱うクラスです。このクラスは Game_Map クラスの内部で使用されます。
  238. # 現在のマップに乗り物がないときは、マップ座標 (-1,-1) に設定されます。
  239. #==============================================================================

  240. class Game_Vehicle < Game_Character

  241.   #--------------------------------------------------------------------------
  242.   # ● 乗り物に乗る
  243.   #--------------------------------------------------------------------------
  244.   alias a9_003_get_on get_on
  245.   def get_on
  246.     a9_003_get_on
  247.     $game_map.mode3D = true if @type == 2  # 飛行船の場合
  248.   end

  249.   #--------------------------------------------------------------------------
  250.   # ● フレーム更新
  251.   #--------------------------------------------------------------------------
  252.   alias a9_003_update update
  253.   def update
  254.     a = @altitude
  255.     a9_003_update
  256.     update_angle(a)
  257.   end
  258.   
  259.   #--------------------------------------------------------------------------
  260.   def update_angle(alti)
  261.     def set_angle
  262.       $game_map.set_angle(90 - (45 / 8 * (@altitude / 4 + 1)))
  263.     end
  264.    
  265.     if @type == 2               # 飛行船の場合
  266.       if @driving
  267.         if alti < MAX_ALTITUDE
  268.           @altitude == MAX_ALTITUDE ? $game_map.set_angle(45): set_angle
  269.         end
  270.       elsif 0 < alti
  271.         if @altitude.zero?
  272.           $game_map.set_angle(90)
  273.           $game_map.mode3D = false
  274.         else
  275.             set_angle
  276.         end
  277.       
  278.       end
  279.     end

  280.    
  281.   end
  282. end
复制代码


TileSprite



  1. #==============================================================================
  2. # ■ MainAutotile
  3. #------------------------------------------------------------------------------
  4. #  Bitmapに海形式のオートタイルを描くクラス
  5. #==============================================================================
  6. class MainAutotile
  7.   def initialize(parent, tilebitmaps)
  8.     super()
  9.     @parent = parent
  10.     @bitmaps = tilebitmaps

  11.     @rect = Rect.new(0, 0, 16, 16)
  12. # 01 buf0
  13. # 23    1
  14. # 45    2
  15.     @lt_buffer = {0=>1, 4=>1, 6=>1, 8=>1, 12=>1, 19=>1, 23=>1, 32=>1, 33=>1}
  16.     @lt_buf_0 = {0=>1, 4=>1, 6=>1, 8=>1, 12=>1}
  17.     @lt_buf_1 = {19=>1, 32=>1}
  18.     @lt_buf_2 = {23=>1,33=>1}
  19.     @lt_1 = {1=>1, 3=>1, 5=>1, 7=>1, 9=>1, 11=>1, 13=>1,
  20.       15=>1, 26=>1, 27=>1, 29=>1, 31=>1, 39=>1}
  21.     @lt_2 = {34=>1, 35=>1, 42=>1, 43=>1, 46=>1 }
  22.     @lt_3 = {20=>1, 21=>1, 22=>1, 36=>1, 37=>1, 45=>1}#23, 33
  23.     @lt_4 = {16=>1, 17=>1, 18=>1, 40=>1, 41=>1, 44=>1}#17..19, 32
  24.     @lt_5 = {2=>1, 4=>1, 8=>1, 10=>1, 14=>1, 24=>1,
  25.       25=>1, 28=>1, 30=>1, 38=>1}#0, 6, 12
  26.       
  27.     @rt_buffer = {27=>1}
  28.     @rt_height = {6=>1, 14=>1, 20=>1, 22=>1, 27=>1, 28=>1, 29=>1}#7
  29.    
  30.     @lb_buffer = {1=>1, 2=>1, 3=>1, 31=>1}
  31.     @lb_width = {1=>1, 2=>1, 3=>1, 12=>1, 14=>1, 16=>1, 17=>1, 26=>1, 31=>1}
  32.    
  33.     make_buffer
  34.   end
  35.   
  36.   #ox oy タイル側の転送元原点(海形式のタイルならなんにでも対応出来る)
  37.   #--------------------------------------------------------------------------
  38.   # メイン(海構成)のオートタイルを描く
  39.   # Params:
  40.   #   bmpNo @tilemap.bitmapsの数値(通常0か1)
  41.   #   atid オートタイルID
  42.   #   ox 取得もとx
  43.   #   oy 取得もとy
  44.   #   dx 描画先x
  45.   #   dy 描画先y
  46.   #   bufid バッファID
  47.   #--------------------------------------------------------------------------
  48.   def draw(bmpNo, atid, ox, oy, dx, dy, bufid)
  49.     r = @rect
  50.     r.set_size(16, 16)
  51.     b = @parent
  52.     bw = bufid << 5
  53.     bmps = rect = nil
  54.     return if draw_lt(r, atid, ox, oy, bw) do |bmps, rect|
  55.       b.blt(dx, dy, bmps[bmpNo], rect)
  56.     end
  57.    
  58.     draw_rt(r, atid, ox, oy, bw) do |bmps, rect|
  59.       b.blt(dx + 16, dy, bmps[bmpNo], rect)
  60.     end   

  61.     return if draw_lb(r, atid, ox, oy, bw) do |bmps, rect|
  62.       b.blt(dx, dy + 16, bmps[bmpNo], rect)
  63.     end

  64.     draw_rb(r, atid, ox, oy) do |bmps, rect|
  65.       b.blt(dx + 16, dy + 16, bmps[bmpNo], rect)
  66.     end   
  67.   end

  68.   #--------------------------------------------------------------------------
  69.   def dispose
  70.     @buffers.each do |v|
  71.       v.dispose
  72.     end
  73.   end
  74.   
  75.   #--------------------------------------------------------------------------
  76.   private
  77.   
  78.   #--------------------------------------------------------------------------
  79.   def make_buffer
  80.     @buffers = []
  81.    
  82.     bmp1 = Bitmap.new(1024, 96)
  83.     @buffers[0] = bmp1
  84.     tobmp = @bitmaps[0]
  85.     for i in 0..6
  86.       draw_buffer(tobmp, i * 64, 0, bmp1, i * 32, 0)
  87.     end
  88.     #7のバッファ
  89.     for i in 0..6
  90.       draw_buffer(tobmp, i * 64, 96, bmp1, 256 + (i * 32), 0)
  91.     end
  92.     #15のバッファ
  93.     for i in [0, 1, 2, 4, 5, 6]
  94.       draw_buffer(tobmp, i * 64, 192, bmp1, 512 + (i * 32), 0)
  95.     end
  96.     for i in [0, 1, 2, 4, 5, 6]
  97.       draw_buffer(tobmp, i * 64, 288, bmp1, 768 + (i * 32), 0)
  98.     end
  99.    
  100.     bmp2 = Bitmap.new(1024, 96)
  101.     @buffers[1] = bmp2
  102.     tobmp = @bitmaps[1]
  103.     for i in 0..7
  104.       draw_buffer(tobmp, i * 64, 0, bmp2, i * 32, 0)
  105.     end
  106.     for i in 0..7
  107.       draw_buffer(tobmp, i * 64, 96, bmp2, 256 + (i * 32), 0)
  108.     end
  109.     for i in 0..7
  110.       draw_buffer(tobmp, i * 64, 192, bmp2, 512 + (i * 32), 0)
  111.     end
  112.     for i in 0..7
  113.       draw_buffer(tobmp, i * 64, 288, bmp2, 768 + (i * 32), 0)
  114.     end
  115.   end

  116.   #--------------------------------------------------------------------------
  117.   def draw_buffer(bmp, ox, oy, tobmp, tox, toy)
  118.     r = Rect.new(0, 0, 16, 16)
  119.     #つうじょうチップ
  120.     r.set_pos(ox + 32, oy + 64)
  121.     tobmp.blt(tox,      toy, bmp, r)
  122.     r.set_pos(ox + 16, oy + 64)
  123.     tobmp.blt(tox + 16, toy, bmp, r)
  124.     r.set_pos(ox + 32, oy + 48)
  125.     tobmp.blt(tox,      toy + 16, bmp, r)
  126.     r.set_pos(ox + 16, oy + 48)
  127.     tobmp.blt(tox + 16, toy + 16, bmp, r)
  128.    
  129.     #||
  130.     r.set_pos(ox, oy + 64)
  131.     tobmp.blt(tox,      toy + 32, bmp, r)
  132.     r.set_pos(ox + 48, oy + 64)
  133.     tobmp.blt(tox + 16, toy + 32, bmp, r)
  134.     r.set_pos(ox, oy + 48)
  135.     tobmp.blt(tox,      toy + 48, bmp, r)
  136.     r.set_pos(ox + 48, oy + 48)
  137.     tobmp.blt(tox + 16, toy + 48, bmp, r)
  138.    
  139.     #=
  140.     r.set_pos(ox + 32, oy + 32)
  141.     tobmp.blt(tox,      toy + 64, bmp, r)
  142.     r.set_pos(ox + 16, oy + 32)
  143.     tobmp.blt(tox + 16, toy + 64, bmp, r)
  144.     r.set_pos(ox + 32, oy + 80)
  145.     tobmp.blt(tox,      toy + 80, bmp, r)
  146.     r.set_pos(ox + 16, oy + 80)
  147.     tobmp.blt(tox + 16, toy + 80, bmp, r)
  148.   end
  149.   
  150.   #--------------------------------------------------------------------------
  151.   # オートタイルの左上を描く
  152.   # Return: 描画終了ならtrue
  153.   #--------------------------------------------------------------------------
  154.   def draw_lt(r, atid, ox, oy, bx)
  155.     case
  156.       #r.set(ox, oy, 16, 16)
  157.       when @lt_buf_0.key?(atid)
  158.         r.x = bx
  159.         r.y = 0
  160.       when @lt_buf_1.key?(atid)
  161.         r.x = bx
  162.         r.y = 32
  163.       when @lt_buf_2.key?(atid)
  164.         r.x = bx
  165.         r.y = 64
  166.       when @lt_1.key?(atid)
  167.         r.x = ox + 32
  168.         r.y = oy
  169.       when @lt_2.key?(atid)
  170.         r.x = ox
  171.         r.y = oy + 32
  172.       when @lt_3.key?(atid)
  173.         r.x = ox + 32
  174.         r.y = oy + 32
  175.       when @lt_4.key?(atid)
  176.         r.x = ox
  177.         r.y = oy + 64
  178.       when @lt_5.key?(atid)
  179.         r.x = ox + 32
  180.         r.y = oy + 64
  181.     end
  182.     bool = false
  183.     case atid
  184.       when 0, 15, 32..34, 36, 38, 40
  185.         r.set(r.x, r.y, 32, 32)
  186.         bool = true
  187.       when 3, 4, 7, 8, 11, 12, 16, 18, 23, 25, 35, 37
  188.         r.width = 32
  189.       when 6, 9, 13, 19, 20, 28, 41
  190.         r.height = 32
  191.     end
  192.     yield(@lt_buffer.key?(atid) ? @buffers :  @bitmaps , r)
  193.     return bool
  194.   end

  195.   #--------------------------------------------------------------------------
  196.   # オートタイルの右上を描く
  197.   # Return: 描画終了ならtrue
  198.   #--------------------------------------------------------------------------
  199.   def draw_rt(r, atid, ox, oy, bx)
  200.     if case atid
  201.       #r.set(ox + 16, oy, 16, 16)
  202.       when 27
  203.         r.set_pos(bx + 16, 32)
  204.       when 2, 6, 10, 14, 15, 17, 19, 30, 31, 41 #2, 3, 7, 11
  205.         r.set_pos(ox + 48, oy)
  206.       when 1, 5, 9, 13, 28, 29, 40 #0, 1, 4, 8, 12, 16, 18
  207.         r.set_pos(ox + 16, oy + 64)
  208.       when 20..22, 34, 43 #35, 33, 23
  209.         r.set_pos(ox + 16, oy + 32)
  210.       when 24, 26, 38, 39, 44 #25, 27, 32
  211.         r.set_pos(ox + 48, oy + 64)
  212.       when 36, 42, 45, 46 #37
  213.         r.set_pos(ox + 48, oy + 32)
  214.       #when 3, 7, 11, 18, 25, 35, 37
  215.       #  false
  216.     end then
  217.       r.set(r.x, r.y, 16, @rt_height.key?(atid) ? 32: 16)
  218.       yield(@rt_buffer.key?(atid) ? @buffers :  @bitmaps, r)
  219.     end
  220.     return false
  221.   end

  222.   #--------------------------------------------------------------------------
  223.   # オートタイルの左下を描く
  224.   # Return: 描画終了ならtrue
  225.   #--------------------------------------------------------------------------
  226.   def draw_lb(r, atid, ox, oy, bx)
  227.     if case atid
  228.       #r.set(ox, oy + 16, 16, 16)
  229.       when 1, 2, 3
  230.         r.set_pos(bx, 16)
  231.       when 31
  232.         r.set_pos(bx, 80)
  233.       when 8, 10, 11, 12, 14, 15, 22, 23, 25, 27, 37 #9, 13
  234.         r.set_pos(ox + 32, oy + 16)
  235.       when 4, 5, 7, 21, 24, 26, 36 #0, 1,2,3,  6, 20
  236.         r.set_pos(ox + 32, oy + 48)
  237.       when 16, 17, 18, 32, 34, 35, 42 #19
  238.         r.set_pos(ox, oy + 48)
  239.       when 29, 30, 38, 39, 45 #28, 33, 31
  240.         r.set_pos(ox + 32, oy + 80)
  241.       when 40, 43, 44, 46 #41
  242.         r.set_pos(ox, oy + 80)
  243.       #when 9, 13, 20, 28, 41
  244.       #  false
  245.     end then
  246.       is_buf = @lb_width.key?(atid)
  247.       r.set(r.x, r.y, is_buf ? 32: 16, 16)
  248.       yield(@lb_buffer.key?(atid) ? @buffers :  @bitmaps, r)
  249.       return is_buf || @rt_height.key?(atid)
  250.     end
  251.     return false
  252.   end

  253.   #--------------------------------------------------------------------------
  254.   # オートタイルの左下を描く(バッファは使わない)
  255.   # Return: なし
  256.   #--------------------------------------------------------------------------
  257.   def draw_rb(r, atid, ox, oy)
  258.     case atid
  259.       #r.set(ox, oy + 16, 16, 16)
  260.       when 4, 5, 7, 13, 15, 18, 19, 21, 23, 35 #6, 12, 14
  261.         r.set_pos(ox + 48, oy + 16)
  262.       when 8..11, 16, 34 #0,1,2,3, 17, 20, 22
  263.         r.set_pos(ox + 16, oy + 48)
  264.       when 24, 25, 27, 32, 36, 37, 42 #26
  265.         r.set_pos(ox + 48, oy + 48)
  266.       when 30, 40, 41, 43 #28, 29, 31, 33
  267.         r.set_pos(ox + 16, oy + 80)
  268.       when 38, 39, 44..46
  269.         r.set_pos(ox + 48, oy + 80)
  270.       #when 6, 14, 20, 22, 28, 29
  271.       #12,  17, 26
  272.       else return
  273.     end
  274.     yield (@bitmaps, r)
  275.   end
  276. end
复制代码

MainAutotile



存到Graphics\Pictures下bg.png



可以直接用 $game_map.mode3D = true  调用  
{/hx}{/hx}翻译的工作就交给大大门了 不过貌似很容易看的懂没翻译也基本能了解了= =  日文的备注 看过去意思10有8~9能马上知道是什么= =!
蚊香
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2009-3-5
帖子
2398
7
发表于 2009-3-13 06:15:25 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
59
在线时间
31 小时
注册时间
2009-1-30
帖子
207
8
 楼主| 发表于 2009-3-13 06:28:43 | 只看该作者
{/gg}{/gg}缺点就是 事件不做任何变化他只更改了地图元件
此脚本是用于大地图   不考虑人物其他相对屏幕坐标  
而且其他地方用了奇臭无比= = 房子都没房子样了
不要飞艇才 出现伪3D效果可以找到

    if @type == 2  # 飛行船の場合
      if @driving
        if alti < MAX_ALTITUDE
          @altitude == MAX_ALTITUDE ? $game_map.set_angle(45): set_angle
        end
      elsif 0 < alti
        if @altitude.zero?
          $game_map.set_angle(90)
          $game_map.mode3D = false
        else
            set_angle
        end
      
      end
    end
注释掉  然后用 $game_map.mode3D控制

{/hx}{/hx}希望有高手能做下对事件方面的内容
蚊香
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2008-10-19
帖子
271
9
发表于 2009-3-15 02:52:19 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
签名被屏蔽
回复 支持 反对

使用道具 举报

Lv2.观梦者 (管理员)

八云紫的式神

梦石
0
星屑
624
在线时间
1243 小时
注册时间
2008-1-1
帖子
4282

烫烫烫

10
发表于 2009-3-22 16:55:24 | 只看该作者
RM的效率处理3D没问题吗= =|||
rm for linux(wine)制作中,期待夏娜SAMA能实现到webrm上
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-12 20:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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