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

Project1

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

[已经解决] 請幫忙修改下(Tilemap)

 关闭 [复制链接]

Lv1.梦旅人

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

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

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

x
本帖最后由 david50407 于 2009-7-5 14:39 编辑

因為最近在嘗試RMXP+RGSS2
所以又回來研究tilemap
根據上次寫的腳本重新寫過
但flash_data部分遇到了問題:
加上了draw_flash後,fps被吃掉了,而且還顯示不出效果(??)

以下是我寫的腳本,請大家幫忙看下
  1. class Tilemap
  2.   WIN_W = 640
  3.   WIN_H = 480
  4.   AREA_W = 32
  5.   AREA_H = 32
  6.   AREA_X = WIN_W / AREA_W
  7.   AREA_Y = WIN_H / AREA_H
  8.   ANI_T = 20  #動畫等待時間(單位:畫格)
  9.   #畫自動元件用
  10.   AUTO_XY = [
  11.     [8, 8, 8, 8], [3, 8, 8, 8], [8, 3, 8, 8], [3, 3, 8, 8],
  12.       [8, 8, 8, 3], [3, 8, 8, 3], [8, 3, 8, 3], [3, 3, 8, 3],
  13.       [8, 8, 3, 8], [3, 8, 3, 8], [8, 3, 3, 8], [3, 3, 3, 8],
  14.       [8, 8, 3, 3], [3, 8, 3, 3], [8, 8, 3, 3], [3, 3, 3, 3],
  15.       [7, 7, 7, 7], [7, 3, 7, 7], [7, 7, 7, 3], [7, 3, 7, 3],
  16.       [5, 5, 5, 5], [5, 5, 5, 3], [5, 5, 3, 5], [5, 5, 3, 3],
  17.       [9, 9, 9, 9], [9, 9, 3, 9], [3, 9, 9, 9], [3, 9, 3, 9],
  18.       [11, 11, 11, 11], [3, 11, 11, 11], [11, 3, 11, 11], [3, 3, 11, 11],
  19.       [7, 9, 7, 9], [5, 5, 11, 11], [4, 4, 4, 4], [4, 4, 4, 3],
  20.       [6, 6, 6, 6], [6, 6, 3, 6], [12, 12, 12, 12], [3, 12, 12, 12],
  21.       [10, 10, 10, 10], [10, 3, 10, 10], [4, 6, 4, 6], [4, 4, 10, 10],
  22.       [10, 12, 10, 12], [6, 6, 12, 12], [4, 6, 10, 12], [1, 1, 1, 1]
  23.   ]
  24.   #畫面閃爍用
  25.   FlashOpacity=[110,100,90,80,90,100]
  26.   #--------------------------------------------------------------------------
  27.   # ● 定義外部變數
  28.   #--------------------------------------------------------------------------
  29.   attr_accessor :autotiles
  30.   attr_accessor :tileset
  31.   attr_accessor :ox
  32.   attr_accessor :oy
  33.   attr_reader :dispose
  34.   #attr_reader :disposed?
  35.   attr_reader :viewport
  36.   #--------------------------------------------------------------------------
  37.   # ● 初始化物件
  38.   # 內部使用以 @@ 開頭
  39.   #--------------------------------------------------------------------------
  40.   def initialize(viewport = Viewport.new())
  41.     @autotiles = []
  42.     @tileset = nil
  43.     @map_data = nil
  44.     @flash_data = nil
  45.     @priorities = nil
  46.     @visible = true
  47.     @ox = 0
  48.     @oy = 0
  49.     @dispose = nil
  50.     @viewport = viewport
  51.    
  52.     @@sprite = {} #元件Sprite
  53.     @@cache = {} #元件Cache
  54.     @@ani_switch = {} #動畫開關
  55.     @@count = 0 #當前顯示動畫
  56.     @@counting = 0 #動畫等待畫格
  57.     @@flash_layer = {} #畫面閃爍用
  58.     @@last_ox = 0
  59.     @@last_oy = 0
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 載入地圖資訊
  63.   # 載入後繪製地圖
  64.   #--------------------------------------------------------------------------
  65.   def map_data
  66.     return @map_data
  67.   end
  68.   def map_data=(data)
  69.     @map_data = data
  70.     return if @map_data.nil?
  71.     # 建立地圖元件Cache(方法一) BEGIN
  72.     # 地圖較大時不適用
  73.     #for x in 0...@map_data.xsize
  74.     #  for y in 0...@map_data.ysize
  75.     #    for l in 0..2
  76.     #      cache_bitmap(@map_data[x, y, l])
  77.     #    end
  78.     #  end
  79.     #end
  80.     # 建立地圖元件Cache(方法一) END
  81.     # 建立地圖元件Cache(方法二) BEGIN
  82.     # 元件圖較大時不適用
  83.     for auto in 0..6
  84.       next if @autotiles[auto].nil?
  85.       for i in 0...48
  86.         cache_bitmap(auto * 48 + i)
  87.       end
  88.     end
  89.     if @tileset != nil
  90.       for y in [email protected] / AREA_H
  91.         yy = y * 8
  92.         for x in 0...8
  93.           cache_bitmap(yy + x + 384)
  94.         end
  95.       end
  96.     end
  97.     # 建立地圖元件Cache(方法二) END
  98.     # 描繪地圖元件 BEGIN
  99.     range_x = (@ox + WIN_W) / AREA_W
  100.     range_y = (@oy + WIN_H) / AREA_H
  101.     range_x = [range_x, WIN_W / AREA_W - 1].min if @map_data.xsize * AREA_W <= WIN_W
  102.     range_y = [range_y, WIN_H / AREA_H - 1].min if @map_data.ysize * AREA_H <= WIN_H
  103.     for x in (@ox / AREA_W - 1)..range_x
  104.       for y in (@oy / AREA_H - 1)..range_y
  105.         for l in 0..2
  106.           draw(x, y, l)
  107.           #繪製元件閃爍
  108.           draw_flash(x, y)
  109.         end
  110.       end
  111.     end
  112.     # 描繪地圖元件 END
  113.   end
  114.   #--------------------------------------------------------------------------
  115.   # ● 載入地圖優先度
  116.   # 載入後重整地圖元件Z座標
  117.   #--------------------------------------------------------------------------
  118.   def priorities
  119.     return @priorities
  120.   end
  121.   def priorities=(value)
  122.     @priorities = value
  123.     return if @priorities.nil?
  124.     for x in ([@ox / AREA_W - 1, 0].max)..((@ox + WIN_W) / AREA_W)
  125.       for y in ([@oy / AREA_H - 1, 0].max)..((@oy + WIN_H) / AREA_H)
  126.         for l in 0..2
  127.           next if @@sprite[[x, y, l]].nil?
  128.           id = @map_data[x, y, l]
  129.           next if id.nil?
  130.           next if id == 0
  131.           z = @priorities[id] == 0 ? 0 : 32 * (1 + @@sprite[[x, y, l]].y / AREA_H + @priorities[id])
  132.           z = 0 if z < 0
  133.           @@sprite[[x, y, l]].z = z
  134.         end
  135.       end
  136.     end
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 建立地圖元件Cache
  140.   #--------------------------------------------------------------------------
  141.   def cache_bitmap(id)
  142.     if @@cache[id].nil?
  143.       if id < 384 #自動元件的情況
  144.         bitmapid = id / 48 - 1
  145.         @@cache[id] = {}
  146.         @@cache[id][0] = get_bitmap_a(id, bitmapid)
  147.         if @autotiles[bitmapid].width > AREA_W * 3
  148.           anis = @autotiles[bitmapid].width / AREA_W / 3
  149.           for i in 1...anis
  150.             @@cache[id][i] = get_bitmap_a(id, bitmapid, i)
  151.           end
  152.         end
  153.       else #一般元件的情況
  154.         @@cache[id] = get_bitmap(id)
  155.       end
  156.     end
  157.     return @@cache[id][0] if @@cache[id].is_a?(Hash)
  158.     return @@cache[id]
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 取得地圖元件Bitmap
  162.   # get_bitmap     : 取得一般地圖元件Bitmap
  163.   # get_bitmap_a : 取得自動地圖元件Bitmap
  164.   #--------------------------------------------------------------------------
  165.   def get_bitmap(id)
  166.     bitmap = Bitmap.new(AREA_W, AREA_H)
  167.     rect = Rect.new((id - 384) % 8 * AREA_W, (id - 384) / 8 * AREA_H, AREA_W, AREA_H)
  168.     bitmap.blt(0, 0, @tileset, rect)
  169.     return bitmap
  170.   end
  171.   def get_bitmap_a(id, bitmapid, ani = 0)
  172.     bitmap = Bitmap.new(AREA_W, AREA_H)
  173.     pic_id = id % 48
  174.     for i in 0..3
  175.       rect_x = (AUTO_XY[pic_id][i] - 1) % 3
  176.       rect_y = (AUTO_XY[pic_id][i] - 1) / 3
  177.       rect_x *= AREA_W
  178.       rect_y *= AREA_H
  179.       x = i % 2
  180.       y = i / 2
  181.       x *= AREA_W / 2
  182.       y *= AREA_H / 2
  183.       rect = Rect.new(rect_x + x + (ani * AREA_W * 3), rect_y + y, AREA_W / 2, AREA_H / 2)
  184.       bitmap.blt(x, y, @autotiles[bitmapid], rect)
  185.     end
  186.     return bitmap
  187.   end
  188.   #--------------------------------------------------------------------------
  189.   # ● 繪製地圖元件
  190.   #--------------------------------------------------------------------------
  191.   def draw(x, y, l)
  192.     x0 = x
  193.     y0 = y
  194.     # 數值修正
  195.     x -= @map_data.xsize if x >= @map_data.xsize
  196.     x += @map_data.xsize if x < 0
  197.     y -= @map_data.ysize if y >= @map_data.ysize
  198.     y += @map_data.ysize if y < 0
  199.     id = @map_data[x, y, l]
  200.     return if id == 0
  201.     unless @@sprite[[x, y, l]].nil?
  202.       @@sprite[[x, y, l]].x = x0 * AREA_W - @ox
  203.       @@sprite[[x, y, l]].y = y0 * AREA_H - @oy
  204.       return if @priorities.nil?
  205.       z = @priorities[id] == 0 ? 0 : 32 * (1 + @@sprite[[x, y, l]].y / AREA_H + @priorities[id])
  206.       z = 0 if z < 0
  207.       @@sprite[[x, y, l]].z = z
  208.       return
  209.     end
  210.     @@sprite[[x, y, l]] = Sprite.new(@viewport)
  211.     @@sprite[[x, y, l]].x = x0 * AREA_W - @ox
  212.     @@sprite[[x, y, l]].y = y0 * AREA_H - @oy
  213.     @@sprite[[x, y, l]].z = l
  214.     @@sprite[[x, y, l]].bitmap = cache_bitmap(id)
  215.     if id < 384
  216.       if @@cache[id].length > 1
  217.         #動畫
  218.         @@ani_switch[[x, y, l]] = true
  219.         @@sprite[[x, y, l]].bitmap = @@cache[id][@@count % @@cache[id].length]
  220.       end
  221.     end
  222.     return if @priorities.nil?
  223.     z = @priorities[id] == 0 ? 0 : 32 * (1 + @@sprite[[x, y, l]].y / AREA_H + @priorities[id])
  224.     z = 0 if z < 0
  225.     @@sprite[[x, y, l]].z = z
  226.   end
  227.   #--------------------------------------------------------------------------
  228.   # ● 繪製地圖元件閃爍
  229.   #--------------------------------------------------------------------------
  230.   def draw_flash(x, y)
  231.     return if @flash_data.nil?
  232.     return if @flash_data[x, y].nil?
  233.     unless @@flash_layer[[x,y]].nil?
  234.       @@flash_layer[[x,y]].x = x * AREA_W - @ox
  235.       @@flash_layer[[x,y]].y = y * AREA_H - @oy
  236.       @@flash_layer[[x,y]].opacity=FlashOpacity[(Graphics.frame_count/4) % FlashOpacity.size]
  237.       return
  238.     end
  239.     @@flash_layer[[x,y]] = Sprite.new(@viewport)
  240.     @@flash_layer[[x,y]].x = x * AREA_W - @ox
  241.     @@flash_layer[[x,y]].y = y * AREA_H - @oy
  242.     @@flash_layer[[x,y]].z = 1
  243.     @@flash_layer[[x,y]].opacity=FlashOpacity[(Graphics.frame_count/4) % FlashOpacity.size]
  244.     rgb = {}
  245.     %w(r g b).inject(@flash_data[x, y]) {|a,b| rest, rgb[b] = a.divmod(16); rest}
  246.     return if rgb == {'r'=>0,'g'=>0,'b'=>0}
  247.     tmpcolor = Color.new(rgb['r']*16,rgb['g']*16,rgb['b']*16,0)
  248.     if @@cache[-@flash_data[x, y]].nil?
  249.       @@cache[-@flash_data[x, y]] = Bitmap.new(AREA_W,AREA_H)
  250.       @@cache[-@flash_data[x, y]].fill_rect(0,0,AREA_W,AREA_H,tmpcolor)
  251.     end
  252.     @@flash_layer[[x,y]].bitmap = @@cache[-@flash_data[x, y]]
  253.   end
  254.   #--------------------------------------------------------------------------
  255.   # ● 設定地圖座標
  256.   #--------------------------------------------------------------------------
  257.   def ox=(ox)
  258.     return if @ox == ox
  259.     @@last_ox = @ox if @@last_ox == @ox
  260.     @ox = ox
  261.     return @ox
  262.   end
  263.   def oy=(oy)
  264.     return if @oy == oy
  265.     @@last_oy = @oy if @@last_oy == @oy
  266.     @oy = oy
  267.     return @oy
  268.   end
  269.   #--------------------------------------------------------------------------
  270.   # ● 設定地圖顯示
  271.   #--------------------------------------------------------------------------
  272.   def visible
  273.     return @visible
  274.   end
  275.   def visible=(value)
  276.     @visible = value
  277.     for i in @@sprite.values
  278.       i.visible = @visible
  279.     end
  280.     return @visible
  281.   end
  282.   #--------------------------------------------------------------------------
  283.   # ● 更新地圖元件閃爍
  284.   #--------------------------------------------------------------------------
  285.   def flash_data
  286.     return @flash_data
  287.   end
  288.   def flash_data=(data)
  289.     @flash_data = data
  290.     return @flash_data
  291.   end
  292.   #--------------------------------------------------------------------------
  293.   # ● 更新地圖元件
  294.   #--------------------------------------------------------------------------
  295.   def update
  296.     # 更新動畫等待畫格
  297.     if @@counting >= ANI_T
  298.       @@counting = 0
  299.       @@count += 1
  300.       for i in @@ani_switch.keys
  301.         id = @map_data[i[0], i[1], i[2]]
  302.         @@sprite[i].bitmap = @@cache[id][@@count % @@cache[id].length]
  303.       end
  304.     else
  305.       @@counting += 1
  306.     end
  307.     if @ox != @@last_ox
  308.       #人物走路時候
  309.       if @ox % (AREA_W / 2) != 0
  310.         for i in @@sprite.values
  311.           i.ox = @ox - @@last_ox
  312.         end
  313.       else
  314.         refreshox
  315.         @@last_ox = @ox
  316.       end
  317.     elsif @oy != @@last_oy
  318.       #人物走路時候
  319.       if @oy % AREA_H != 0
  320.         for i in @@sprite.values
  321.           i.oy = @oy - @@last_oy
  322.         end
  323.       else
  324.         refreshoy
  325.         @@last_oy = @oy
  326.       end
  327.     end
  328.     for i in @@sprite.keys
  329.      id = @map_data[i[0],i[1],i[2]]
  330.      if @priorities[id] != 0
  331.        @@sprite[i].z = @priorities[id] == 0 ? 0 : 32 * (1 + @@sprite[i].y / AREA_H + @priorities[id])
  332.        @@sprite[i].update
  333.      end
  334.      for i in @@flash_layer.values
  335.        i.opacity=FlashOpacity[(Graphics.frame_count/4) % FlashOpacity.size]
  336.      end
  337.    end
  338.   end
  339.   #--------------------------------------------------------------------------
  340.   def refreshox
  341.     #需要釋放的元件範圍
  342.     del_range_y = [(@@last_oy / AREA_H - 1), ((@@last_oy + WIN_H) / AREA_H)]
  343.     if @ox > @@last_ox
  344.       del_range_x = [(@@last_ox / AREA_W - 1), (@ox / AREA_W - 2)]
  345.     else
  346.       del_range_x = [((@ox + WIN_W) / AREA_W + 1), ((@@last_ox + WIN_W) / AREA_W)]
  347.     end
  348.     #需要繪製的元件範圍
  349.     draw_range_y = [(@oy / AREA_H - 1), ((@oy + WIN_H) / AREA_H)]
  350.     if @ox > @@last_ox
  351.       draw_range_x = [[((@@last_ox + WIN_W) / AREA_W + 1), (@ox / AREA_W - 1)].max, ((@ox + WIN_W) / AREA_W)]
  352.     else
  353.       draw_range_x = [(@ox / AREA_W - 1), ([(@@last_ox / AREA_W - 1),(@ox + WIN_W) / AREA_W + 1].min - 1)]
  354.     end
  355.     #釋放元件 BEGIN
  356.     for x in del_range_x[0]..del_range_x[1]
  357.       next if draw_range_x[0] > x && x < draw_range_x[1]
  358.       for y in del_range_y[0]..del_range_y[1]
  359.         next if draw_range_y[0] > y && y < draw_range_y[1]
  360.         for l in 0..2
  361.           @@flash_layer[[x, y]].dispose unless @@flash_layer[[x, y]].nil?
  362.           @@flash_layer.delete([x, y])
  363.           next if @@sprite[[x, y, l]].nil?
  364.           @@sprite[[x, y, l]].dispose
  365.           @@sprite.delete([x, y, l])
  366.           @@ani_switch.delete([x, y, l])
  367.         end
  368.       end
  369.     end
  370.     #釋放元件 END
  371.     #恢復走路時候的偏移 BEGIN
  372.     if @ox >= (@map_data.xsize * AREA_W - WIN_W)
  373.       for i in @@sprite.keys
  374.         @@sprite[i].ox = 0
  375.         @@sprite[i].x = i[0] * AREA_W - @ox
  376.         if i[0] < (@ox / 32 - 1)
  377.           @@sprite[i].x += @map_data.xsize * AREA_W
  378.         elsif i[0] == -1
  379.           @@sprite[i].x = 0
  380.         end
  381.       end
  382.     else
  383.       for i in @@sprite.keys
  384.         @@sprite[i].ox = 0
  385.         @@sprite[i].x = i[0] * AREA_W - @ox
  386.       end
  387.     end
  388.     #恢復閃爍偏移
  389.     unless @flash_data.nil?
  390.       if @ox >= (@map_data.xsize * AREA_W - WIN_W)
  391.         for i in @flash_data.keys
  392.           @@flash_layer[i].ox = 0
  393.           @@flash_layer[i].x = i[0] * AREA_W - @ox
  394.           if i[0] < (@ox / 32 - 1)
  395.             @@flash_layer[i].x += @map_data.xsize * AREA_W
  396.           elsif i[0] == -1
  397.             @@flash_layer[i].x = 0
  398.           end
  399.         end
  400.       else
  401.         for i in @@flash_layer.keys
  402.           @@flash_layer[i].ox = 0
  403.           @@flash_layer[i].x = i[0] * AREA_W - @ox
  404.         end
  405.       end
  406.     end
  407.     #恢復走路時候的偏移 END
  408.     #繪製元件 BEGIN
  409.     for x in draw_range_x[0]..draw_range_x[1]
  410.       for y in draw_range_y[0]..draw_range_y[1]
  411.         for l in 0..2
  412.           draw(x, y, l)
  413.           draw_flash(x, y)
  414.         end
  415.       end
  416.     end
  417.     #繪製元件 END
  418.   end
  419.   #--------------------------------------------------------------------------
  420.   def refreshoy
  421.     #需要釋放的元件範圍
  422.     del_range_x = [(@@last_ox / AREA_W - 1), ((@@last_ox + WIN_W) / AREA_W)]
  423.     if @oy > @@last_oy
  424.       del_range_y = [(@@last_oy / AREA_H - 1), (@oy / AREA_H - 2)]
  425.     else
  426.       del_range_y = [((@oy + WIN_H) / AREA_H + 1), ((@@last_oy + WIN_H) / AREA_H)]
  427.     end
  428.     #需要繪製的元件範圍
  429.     draw_range_x = [(@ox / AREA_W - 1), ((@ox + WIN_W) / AREA_W)]
  430.     if @oy > @@last_oy
  431.       draw_range_y = [[((@@last_oy + WIN_H) / AREA_H + 1), (@oy / AREA_H - 1)].max, ((@oy + WIN_H) / AREA_H)]
  432.     else
  433.       draw_range_y = [(@oy / AREA_H - 1), ([(@@last_oy / AREA_H - 1),(@oy + WIN_H) / AREA_H + 1].min - 1)]
  434.     end
  435.     #釋放元件 BEGIN
  436.     for x in del_range_x[0]..del_range_x[1]
  437.       next if draw_range_x[0] > x && x < draw_range_x[1]
  438.       for y in del_range_y[0]..del_range_y[1]
  439.         next if draw_range_y[0] > y && y < draw_range_y[1]
  440.         for l in 0..2
  441.           @@flash_layer[[x, y]].dispose unless @@flash_layer[[x, y]].nil?
  442.           @@flash_layer.delete([x, y])
  443.           next if @@sprite[[x, y, l]].nil?
  444.           @@sprite[[x, y, l]].dispose
  445.           @@sprite.delete([x, y, l])
  446.           @@ani_switch.delete([x, y, l])
  447.         end
  448.       end
  449.     end
  450.     #釋放元件 END
  451.     #恢復走路時候的偏移 BEGIN
  452.     if @oy >= (@map_data.ysize * AREA_H - WIN_H)
  453.       for i in @@sprite.keys
  454.         @@sprite[i].oy = 0
  455.         @@sprite[i].y = i[1] * AREA_H - @oy
  456.         if i[1] < (@oy / 32 - 1)
  457.           @@sprite[i].y += @map_data.ysize * AREA_H
  458.         elsif i[1] == -1
  459.           @@sprite[i].y = 0
  460.         end
  461.       end
  462.     else
  463.       for i in @@sprite.keys
  464.         @@sprite[i].oy = 0
  465.         @@sprite[i].y = i[1] * AREA_H - @oy
  466.       end
  467.     end
  468.     #恢復閃爍偏移
  469.     unless @flash_data.nil?
  470.       if @oy >= (@map_data.ysize * AREA_H - WIN_H)
  471.         for i in @flash_data.keys
  472.           @@flash_layer[i].oy = 0
  473.           @@flash_layer[i].y = i[1] * AREA_H - @oy
  474.         if i[1] < (@oy / 32 - 1)
  475.             @@flash_layer[i].y += @map_data.ysize * AREA_H
  476.           elsif i[1] == -1
  477.             @@flash_layer[i].y = 0
  478.           end
  479.         end
  480.       else
  481.         for i in @@flash_layer.keys
  482.           @@flash_layer[i].oy = 0
  483.           @@flash_layer[i].y = i[1] * AREA_H - @oy
  484.         end
  485.       end
  486.     end
  487.     #恢復走路時候的偏移 END
  488.     #繪製元件 BEGIN
  489.     for x in draw_range_x[0]..draw_range_x[1]
  490.       for y in draw_range_y[0]..draw_range_y[1]
  491.         for l in 0..2
  492.           draw(x, y, l)
  493.           draw_flash(x, y)
  494.         end
  495.       end
  496.     end
  497.     #繪製元件 END
  498.   end
  499. end
复制代码

Lv1.梦旅人

梦石
0
星屑
50
在线时间
462 小时
注册时间
2007-7-30
帖子
643
2
 楼主| 发表于 2009-7-5 14:38:29 | 只看该作者
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-27 08:06

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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