Project1

标题: 怎么在一个区域内显示某编号的图片呢? [打印本页]

作者: lonelyj    时间: 2009-5-7 17:43
标题: 怎么在一个区域内显示某编号的图片呢?
我想用一张图片作为向上的滚动字幕,用移动图片实现。但我只想在屏幕的某部分看见它,该怎么做?
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: 紫苏    时间: 2009-5-7 18:19
先在 Main 之前插入以下脚本:
unless $PRAGMA_ONCE

class Spriteset_Map
  attr :viewport4
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    # 生成显示端口
    @viewport1 = Viewport.new(0, 0, 640, 480)
    @viewport2 = Viewport.new(0, 0, 640, 480)
    @viewport3 = Viewport.new(0, 0, 640, 480)
    @viewport2.z = 200
    @viewport3.z = 5000
    @viewport4 = Viewport.new(0, 0, 640, 480)
    @viewport4.z = 200

    # 生成元件地图
    @tilemap = Tilemap.new(@viewport1)
    @tilemap.tileset = RPG::Cache.tileset($game_map.tileset_name)
    for i in 0..6
      autotile_name = $game_map.autotile_names
      @tilemap.autotiles = RPG::Cache.autotile(autotile_name)
    end
    @tilemap.map_data = $game_map.data
    @tilemap.priorities = $game_map.priorities
    # 生成远景平面
    @panorama = Plane.new(@viewport1)
    @panorama.z = -1000
    # 生成雾平面
    @fog = Plane.new(@viewport1)
    @fog.z = 3000
    # 生成角色活动块
    @character_sprites = []
    for i in $game_map.events.keys.sort
      sprite = Sprite_Character.new(@viewport1, $game_map.events)
      @character_sprites.push(sprite)
    end
    @character_sprites.push(Sprite_Character.new(@viewport1, $game_player))
    # 生成天气
    @weather = RPG::Weather.new(@viewport1)
    # 生成图片
    @picture_sprites = []
    for i in 1..49
      @picture_sprites.push(Sprite_Picture.new(@viewport2,
        $game_screen.pictures))
    end
    @picture_sprites.push(Sprite_Picture.new(@viewport4,
        $game_screen.pictures[50]))

    # 生成计时器块
    @timer_sprite = Sprite_Timer.new
    # 刷新画面
    update
  end
  alias dispose_old dispose if !method_defined? :dispose_old
  def dispose
    dispose_old
    @viewport4.dispose
  end
end

class Scene_Map
  attr :spriteset
end

$PRAGMA_ONCE = 1
end
这是为了让第 50 号图片在一个独立的视口中显示,并在事件中获取这个视口;
之后就可以在事件中写如下脚本:
viewport = $scene.spriteset.viewport4
# 以下四个数分别是你想要部分显示图片的矩形的 x、y 坐标、宽度、高度
viewport.rect.set(100, 100, 100, 100)
# 原点 x 和原点 y 坐标
viewport.ox = 100
viewport.oy = 100
true
然后显示图片就能看到效果了~仅限于不切换到其它 Scene
另外如果之后要让第 50 号图片恢复全屏幕显示则:
viewport = $scene.spriteset.viewport2
viewport.rect.set(0, 0, 640, 480)
viewport.ox = 0
viewport.oy = 0
即可~ [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: lonelyj    时间: 2009-5-8 18:54
呵呵!我昨天用了一个比较菜鸟的方法解决了这个问题。就是用一个黑框图片把那个挡住,还实现了淡入淡出的功能,吼吼!不过,谢谢你的解答了!




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1