查看: 3061|回复: 14

[已经解决] 如何用脚本让指定图片沿Y轴无限循环移动(滚动)

[复制链接]
梦石
0
星屑
50
在线时间
147 小时
注册时间
2013-12-2
回帖
109
发表于 2013-12-4 15:06:38 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 domodomodomo 于 2013-12-10 12:43 编辑

新手求指教
做了一张首尾可以无缝相接的图片作为标题图片,我想让它滚动,并把它添加到标题脚本里面替换原静态图片,怎么做到
只求循环滚动那段脚本
梦石
0
星屑
52
在线时间
586 小时
注册时间
2012-5-31
回帖
711
发表于 2013-12-4 20:10:18 | 显示全部楼层
移动图片:
$game_screen.pictures[number].move(duration, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
回复

使用道具 举报

故九江太守

梦石
0
星屑
314
在线时间
2158 小时
注册时间
2012-12-5
回帖
4323
发表于 2013-12-4 20:10:55 | 显示全部楼层
貌似是ox吧
回复

使用道具 举报

梦石
0
星屑
50
在线时间
147 小时
注册时间
2013-12-2
回帖
109
 楼主| 发表于 2013-12-4 20:13:36 | 显示全部楼层
你最珍贵 发表于 2013-12-4 20:10
貌似是ox吧

{:2_276:}是要操作这个,不过这个只能移动坐标,没办法循环滚动

点评

弄完了麻烦你发出来看看~~!  发表于 2013-12-5 22:21
回复

使用道具 举报

梦石
0
星屑
50
在线时间
147 小时
注册时间
2013-12-2
回帖
109
 楼主| 发表于 2013-12-4 20:18:11 | 显示全部楼层
wwwcctvty 发表于 2013-12-4 20:10
移动图片:
$game_screen.pictures[number].move(duration, origin, x, y, zoom_x, zoom_y, opacity, blend ...

不行,这个只有移动缩放的简单操作,要的是图片有循环滚动的效果,其实烟雾就是类似的效果,只不过用脚本实现还不知道
回复

使用道具 举报

梦石
0
星屑
50
在线时间
378 小时
注册时间
2013-10-14
回帖
213
发表于 2013-12-4 20:34:46 | 显示全部楼层
本帖最后由 batfjtn 于 2013-12-4 23:06 编辑

你是说XAS里面那样的效果吗?

如果是的话直接添加

[pre lang="ruby" line="1" file="Plane"]#============================================================================
# ■ Plane
#----------------------------------------------------------------------------
#    处理平面的类(DKRM追定义)
#    主要用于处理超出640*480分辨率的远景图和雾图形
#============================================================================

class Plane
  #--------------------------------------------------------------------------
  # ● 初始化定义
  #--------------------------------------------------------------------------
  def initialize(v = Viewport.new(0, 0, 640, 480))
    @x           = 0
    @y           = 0
    @z           = 0
    @ox          = 0
    @oy          = 0
    @ox2         = 0
    @oy2         = 0
    @rect        = v.rect
    @zoom_x      = 1.0
    @zoom_y      = 1.0
    @bitmap      = nil
    @contents    = Sprite.new
    @n_w         = 1
    @n_h         = 1
    @visible     = true
    @tone        = Tone.new(0, 0, 0, 0)
    @color       = Color.new(255,255,255,0)
    @blend_type  = 0
    @opacity     = 255
    @dispose     = false
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def update
    @contents.x = @x
    @contents.y = @y
    @contents.ox = @ox2
    @contents.oy = @oy2
    @contents.opacity = @opacity
    @contents.visible = @visible
    @contents.tone = @tone
    @contents.blend_type = @blend_type
    @contents.z = @z
  end
  #--------------------------------------------------------------------------
  # ● 装载图形(bitmap)
  #--------------------------------------------------------------------------
  def bitmap=(bitmap)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @bitmap = bitmap
      count_wh
      update
    end
  end
  #--------------------------------------------------------------------------
  # ● 图形
  #--------------------------------------------------------------------------
  def bitmap
    return if @bitmap != nil
  end
  #--------------------------------------------------------------------------
  # ● X 坐标(x)
  #--------------------------------------------------------------------------
  def x=(x)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @x = x
      update
    end
  end
  def x
    return @x
  end
  #--------------------------------------------------------------------------
  # ● Y 坐标(y)
  #--------------------------------------------------------------------------
  def y=(y)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @y = y
      update
    end
  end
  def y
    return @y
  end
  #--------------------------------------------------------------------------
  # ● Z 坐标(z)
  #--------------------------------------------------------------------------
  def z=(z)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @z = z
      update
    end
  end
  def z
    return @z
  end
  #--------------------------------------------------------------------------
  # ● X 漂移量(ox)
  #--------------------------------------------------------------------------
  def ox=(ox)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @bitmap != nil
        @ox = ox
        @ox2 = ox % (@bitmap.width * @zoom_x).to_i
        update
      end
    end
  end
  def ox
    return @ox
  end
  #--------------------------------------------------------------------------
  # ● Y 漂移量(oy)
  #--------------------------------------------------------------------------
  def oy=(oy)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @bitmap != nil
        @oy = oy
        @oy2 = oy % (@bitmap.height * @zoom_y).to_i
        update
      end
    end
  end
  def oy
    return @oy
  end
  #--------------------------------------------------------------------------
  # ● X 方向缩放(zoom_x)
  #--------------------------------------------------------------------------
  def zoom_x=(zx)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @zoom_x != zx
        @zoom_x = zx
        count_wh
      end
      update
    end
  end
  def zoom_x
    return @zoom_x
  end
  #--------------------------------------------------------------------------
  # ● Y 方向缩放(zoom_y)
  #--------------------------------------------------------------------------
  def zoom_y=(zy)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      if @zoom_y != zy
        @zoom_y = zy
        count_wh
      end
      update
    end
  end
  def zoom_y
    return @zoom_y
  end
  #--------------------------------------------------------------------------
  # ● 不透明度(opacity)
  #--------------------------------------------------------------------------
  def opacity=(op)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @opacity = op
      update
    end
  end
  def opacity
    return @opacity
  end
  #--------------------------------------------------------------------------
  # ● 颜色叠加(color)
  #--------------------------------------------------------------------------
  def color=(c)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @color = c
      update
    end
  end
  def color
    return @color
  end
  #--------------------------------------------------------------------------
  # ● 色调(tone)
  #--------------------------------------------------------------------------
  def tone=(tone)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @tone = tone
      update
    end
  end
  def tone
    return @tone
  end
  #--------------------------------------------------------------------------
  # ● 是否可见(visible)
  #--------------------------------------------------------------------------
  def visible=(v)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @visible = v
      update
    end
  end
  def visible
    return @visible
  end
  #--------------------------------------------------------------------------
  # ● 叠加模式(blend_type)
  #--------------------------------------------------------------------------
  def blend_type=(bt)
    if @disposed
      raise(RGSSError,"disposed window")
    else
      @blend_type = bt
      update
    end
  end
  def blend_type
    return @blend_type
  end
  #--------------------------------------------------------------------------
  # ● 释放内存(dispose)
  #--------------------------------------------------------------------------
  def dispose
    return if @dispose
    @dispose = true
    @contents.bitmap.dispose if @contents.bitmap != nil
    @contents.bitmap = nil
    @contents.dispose if @contents != nil
    @contents = nil
    @bitmap.dispose if @bitmap != nil
    @bitmap = nil
  end
  #--------------------------------------------------------------------------
  # ● 检测释放(dispose?)
  #--------------------------------------------------------------------------
  def dispose?
    @dispose
  end
  #--------------------------------------------------------------------------
  # ● 计算Plane的长宽与精灵排布(count_wh)
  #--------------------------------------------------------------------------
  def count_wh
    if @bitmap != nil
      @n_w = @rect.width / (@bitmap.width * @zoom_x).to_i + 3
      @n_h = @rect.height / (@bitmap.height * @zoom_y).to_i + 3
      h = @n_h * (@bitmap.height * @zoom_y).to_i
      w = @n_w * (@bitmap.width * @zoom_x).to_i
      if @contents.bitmap == nil
        @contents.bitmap = Bitmap.new(w, h)
      end
      @contents.bitmap.clear
      for x in 0..@n_w
        for y in 0..@n_h
          rect = Rect.new(0,0,@bitmap.width,@bitmap.height)
          dest_rect = Rect.new(x * @bitmap.width * @zoom_x,\
          y * @bitmap.height * @zoom_y,@bitmap.width * @zoom_x,\
          @bitmap.height * @zoom_y)
          @contents.bitmap.stretch_blt(dest_rect, @bitmap, rect)
        end
      end
    end
  end
end
[/pre]

我这个是用了DKRM的自带脚本~~!!

不知道原版的不添加Plane这个类能不能用~~!!

然后修改Scene_Title

[pre lang="ruby" line="1"]#==============================================================================
# ■ Scene_Title
#------------------------------------------------------------------------------
#  处理标题画面的类。
#==============================================================================

class Scene_Title
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 战斗测试的情况下
    if $BTEST
      battle_test
      return
    end
    # 载入数据库
    $data_actors        = load_data("Data/Actors.rxdata")
    $data_classes       = load_data("Data/Classes.rxdata")
    $data_skills        = load_data("Data/Skills.rxdata")
    $data_items         = load_data("Data/Items.rxdata")
    $data_weapons       = load_data("Data/Weapons.rxdata")
    $data_armors        = load_data("Data/Armors.rxdata")
    $data_enemies       = load_data("Data/Enemies.rxdata")
    $data_troops        = load_data("Data/Troops.rxdata")
    $data_states        = load_data("Data/States.rxdata")
    $data_animations    = load_data("Data/Animations.rxdata")
    $data_tilesets      = load_data("Data/Tilesets.rxdata")
    $data_common_events = load_data("Data/CommonEvents.rxdata")
    $data_system        = load_data("Data/System.rxdata")
    # 生成系统对像
    $game_system = Game_System.new
    # 生成标题图形
    @sprite = Sprite.new
    @sprite.bitmap = RPG::Cache.title($data_system.title_name)
    # 生成命令窗口
    s1 = DKRM::NEWGAME_STR
    s2 = DKRM::LOADGAME_STR
    s3 = DKRM::EXITGAME_STR
    @command_window = Window_Command.new(192, [s1, s2, s3])
    @command_window.back_opacity = 160
    @command_window.x = 320 - @command_window.width / 2
    @command_window.y = 288
    # 判定继续的有效性
    #-----------------------------------------------
    @mnpan = Plane.new
    @mnpan.bitmap = RPG::Cache.title("001-Title01")
    @mnpan.z = 1
    #-----------------------------------------------
    # 存档文件一个也不存在的时候也调查
    # 有効为 @continue_enabled 为 true、无效为 false
    @continue_enabled = false
    for i in 0..DKRM::FILESAVE_MAX
      if FileTest.exist?("Save/Save#{i+1}.rxdata")
        @continue_enabled = true
      end
    end
    # 继续为有效的情况下、光标停止在继续上
    # 无效的情况下、继续的文字显示为灰色
    if @continue_enabled
      @command_window.index = 1
    else
      @command_window.disable_item(1)
    end
    # 演奏标题 BGM
    $game_system.bgm_play($data_system.title_bgm)
    # 停止演奏 ME、BGS
    Audio.me_stop
    Audio.bgs_stop
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面被切换就中断循环
      if $scene != self
        break
      end
    end
    # 装备过渡
    Graphics.freeze
    # 释放命令窗口
   
    #-------------------
    @mnpan.dispose
    #-------------------
   
    @command_window.dispose
    # 释放标题图形
    @sprite.bitmap.dispose
    @sprite.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    #--------------
    @mnpan.ox += 1
    #--------------
    # 刷新命令窗口
    @command_window.update
    # 按下 C 键的情况下
    if Input.trigger?(Input::C)
      # 命令窗口的光标位置的分支
      case @command_window.index
      when 0  # 新游戏
        command_new_game
      when 1  # 继续
        command_continue
      when 2  # 退出
        command_shutdown
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 命令 : 新游戏
  #--------------------------------------------------------------------------
  def command_new_game
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 停止 BGM
    Audio.bgm_stop
    # 重置测量游戏时间用的画面计数器
    Graphics.frame_count = 0
    # 生成各种游戏对像
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    # 设置初期同伴位置
    $game_party.setup_starting_members
    # 设置初期位置的地图
    $game_map.setup($data_system.start_map_id)
    # 主角向初期位置移动
    $game_player.moveto($data_system.start_x, $data_system.start_y)
    # 刷新主角
    $game_player.refresh
    # 执行地图设置的 BGM 与 BGS 的自动切换
    $game_map.autoplay
    # 刷新地图 (执行并行事件)
    $game_map.update
    # 切换地图画面
    $scene = Scene_Map.new
  end
  #--------------------------------------------------------------------------
  # ● 命令 : 继续
  #--------------------------------------------------------------------------
  def command_continue
    # 继续无效的情况下
    unless @continue_enabled
      # 演奏无效 SE
      $game_system.se_play($data_system.buzzer_se)
      return
    end
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # 切换到读档画面
    $scene = Scene_Load.new
  end
  #--------------------------------------------------------------------------
  # ● 命令 : 退出
  #--------------------------------------------------------------------------
  def command_shutdown
    # 演奏确定 SE
    $game_system.se_play($data_system.decision_se)
    # BGM、BGS、ME 的淡入淡出
    Audio.bgm_fade(800)
    Audio.bgs_fade(800)
    Audio.me_fade(800)
    # 退出
    $scene = nil
  end
  #--------------------------------------------------------------------------
  # ● 战斗测试
  #--------------------------------------------------------------------------
  def battle_test
    # 载入数据库 (战斗测试用)
    $data_actors        = load_data("Data/BT_Actors.rxdata")
    $data_classes       = load_data("Data/BT_Classes.rxdata")
    $data_skills        = load_data("Data/BT_Skills.rxdata")
    $data_items         = load_data("Data/BT_Items.rxdata")
    $data_weapons       = load_data("Data/BT_Weapons.rxdata")
    $data_armors        = load_data("Data/BT_Armors.rxdata")
    $data_enemies       = load_data("Data/BT_Enemies.rxdata")
    $data_troops        = load_data("Data/BT_Troops.rxdata")
    $data_states        = load_data("Data/BT_States.rxdata")
    $data_animations    = load_data("Data/BT_Animations.rxdata")
    $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
    $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
    $data_system        = load_data("Data/BT_System.rxdata")
    # 重置测量游戏时间用的画面计数器
    Graphics.frame_count = 0
    # 生成各种游戏对像
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_screen        = Game_Screen.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    # 设置战斗测试用同伴
    $game_party.setup_battle_test_members
    # 设置队伍 ID、可以逃走标志、战斗背景
    $game_temp.battle_troop_id = $data_system.test_troop_id
    $game_temp.battle_can_escape = true
    $game_map.battleback_name = $data_system.battleback_name
    # 演奏战斗开始 BGM
    $game_system.se_play($data_system.battle_start_se)
    # 演奏战斗 BGM
    $game_system.bgm_play($game_system.battle_bgm)
    # 切换到战斗画面
    $scene = Scene_Battle.new
  end
end[/pre]

命令后面添加:
  1. @mnpan = Plane.new
  2. @mnpan.bitmap = RPG::Cache.title("001-Title01")
  3. @mnpan.z = 1
复制代码
图片自己修改~!

路径自己修改

释放:
  1. #-------------------
  2. @mnpan.dispose
  3. #-------------------
复制代码
刷新的地方添加:
  1. #--------------
  2. @mnpan.ox += 1
  3. #--------------
复制代码
直接从XAS里面提取来的~!

没有花脑细胞~~!!     
最简单的学习方法就是努力回答别人的问题...
任何教程都没有实践来的重要...
XP小问题都能自己解决了,剩下的就是脚本了...
╰⋛⋋⊱⋋๑角⊱☠c色๑⋌⊰⋌⋚╯
回复

使用道具 举报

梦石
0
星屑
50
在线时间
147 小时
注册时间
2013-12-2
回帖
109
 楼主| 发表于 2013-12-4 22:23:03 | 显示全部楼层
batfjtn 发表于 2013-12-4 20:34
你是说XAS里面那样的效果吗?

如果是的话直接添加

感谢,去试试看行不行,原理大概是每次刷新都给OX+1,让图片一直朝一个方向移动,对么,不过能不能循环还得先试试

点评

测试过~! OK的~~! 把@mnpan.ox += 1改成@mnpan.oy += 1 就满足你的要求了行了~~!!  发表于 2013-12-4 22:28
回复

使用道具 举报

梦石
0
星屑
50
在线时间
147 小时
注册时间
2013-12-2
回帖
109
 楼主| 发表于 2013-12-5 08:24:23 | 显示全部楼层
batfjtn 发表于 2013-12-4 20:34
你是说XAS里面那样的效果吗?

如果是的话直接添加

不行,效果是只有一张图片无限向Y移动,直到天涯海角,不能做到照片首尾相接无限滚动

点评

解决了就好~!!  发表于 2013-12-5 12:13
回复

使用道具 举报

茄孓

梦石
0
星屑
76
在线时间
140 小时
注册时间
2007-5-29
回帖
820
发表于 2013-12-5 09:10:36 | 显示全部楼层
你的循环标题图片A,B
分别弄2个A的Sprite 2个B的Sprite
A1-B1-A2-B2显示
4张图片一直无限向右移动
开始判断
单方向判断就好了
如果B2的X坐标超过了640把它放到A1的左边,如此遍历判断4张图片就好了。
如果2个A,2个B还是不能占满640的分辨率,那么多来几张即可,用数组`

点评

判定坐标的脚本是怎么写的……  发表于 2013-12-5 11:59
多谢提醒  发表于 2013-12-5 10:51
回复

使用道具 举报

梦石
0
星屑
50
在线时间
378 小时
注册时间
2013-10-14
回帖
213
发表于 2013-12-5 11:30:24 | 显示全部楼层
domodomodomo 发表于 2013-12-5 08:24
不行,效果是只有一张图片无限向Y移动,直到天涯海角,不能做到照片首尾相接无限滚动 ...


你需要找特殊的图片~~!!

找那种可以首位相接的图片~~!!

可以去三搭不留点度娘点侃~~!!

图片中搜索平铺~~!!!

就可以找到很多类似的图片了~~!!

点评

貌似有着什么深深地误解  发表于 2013-12-6 07:55
= =你也以为哦我是伸手党?我第一句就说明了我有一张可以首尾相接的图片,我想要的是让它前后相接滚动起来,9楼基本解惑了  发表于 2013-12-5 11:46
最简单的学习方法就是努力回答别人的问题...
任何教程都没有实践来的重要...
XP小问题都能自己解决了,剩下的就是脚本了...
╰⋛⋋⊱⋋๑角⊱☠c色๑⋌⊰⋌⋚╯
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部