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

Project1

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

[已经解决] 一个状态窗口中有一个人物行走踏步动态图脚本如何实现。

[复制链接]

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
跳转到指定楼层
1
发表于 2021-3-30 18:05:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
人物行走怎么描绘我能实现,但是要使之走动起来就茫然了。求指教。

Lv5.捕梦者

梦石
0
星屑
26184
在线时间
5343 小时
注册时间
2016-3-8
帖子
1655
2
发表于 2021-3-30 19:04:10 | 只看该作者
RUBY 代码复制
  1. # Script:   Draw Animated Characters In Windows
  2. # Author:   Evgenij
  3. # Date:     07.01.2015
  4. # Version:  1.0a
  5. #
  6. # Description: With this script you can add a new method to windows
  7. #              which will draw animated characters
  8. #
  9. #              You need to include the EVG::AnimatedDrawCharacter Module
  10. #              into a Window class.
  11. #              Then you can use this methods:
  12. #                draw_animated_character(character_name, character_index, x, y, direction = 2)
  13. #                clear_animated_characters # clears all the characters from windows content
  14. #                      # and stops drawing them
  15. module EVG
  16.   # Adds a new method to a window when included:
  17.   #   draw_animated_character(character_name, character_index, x, y, direction = 2)
  18.   module AnimatedDrawCharacter
  19.     # wait between each character frame (in frames)
  20.     WAIT_BETWEEN_FRAMES = 10
  21.  
  22.     def initialize(*args)
  23.       super(*args)
  24.       create_animation_state_machine
  25.     end
  26.  
  27.     def create_animation_state_machine
  28.       @anim_state_machine = AnimationStateMachine.new
  29.       @animated_characters = []
  30.     end
  31.  
  32.     def draw_animated_character(character_name, character_index, x, y, direction = 2)
  33.       return unless character_name
  34.       bitmap = Cache.character(character_name)
  35.       sign = character_name[/^[\!\$]./]
  36.       if sign && sign.include?('$')
  37.         cw = bitmap.width / 3
  38.         ch = bitmap.height / 4
  39.       else
  40.         cw = bitmap.width / 12
  41.         ch = bitmap.height / 8
  42.       end
  43.       @animated_characters << [character_name, character_index, x, y, cw, ch, direction]
  44.       @animated_characters.uniq!
  45.       update_animated_characters
  46.     end
  47.  
  48.     def clear_animated_characters
  49.       @animated_characters.each do |arr|
  50.         contents.clear_rect(arr[2] - arr[4] / 2, arr[3] - arr[5], arr[4], arr[5])
  51.       end
  52.       @animated_characters = []
  53.     end
  54.  
  55.     def update
  56.       super
  57.       @anim_state_machine.update
  58.       update_animated_characters if @anim_state_machine.changed?
  59.     end
  60.  
  61.     def update_animated_characters
  62.       @animated_characters.each{|arr| update_animated_character(arr)}
  63.     end
  64.  
  65.     # Param looks like this: [character_name, character_index, x, y, ch, cw, direction]
  66.     def update_animated_character(arr)
  67.       contents.clear_rect(arr[2] - arr[4] / 2, arr[3] - arr[5], arr[4], arr[5])
  68.       bitmap = Cache.character(arr[0])
  69.       src_rect = @anim_state_machine.get_rect(arr[1], arr[4], arr[5], arr[6])
  70.       contents.blt(arr[2] - arr[4] / 2, arr[3] - arr[5], bitmap, src_rect)
  71.     end
  72.   end
  73.  
  74.   class AnimationStateMachine
  75.     def initialize
  76.       super
  77.       @anime_count = 0
  78.       @pattern = 1
  79.       @frame_count = AnimatedDrawCharacter::WAIT_BETWEEN_FRAMES
  80.     end
  81.  
  82.     def get_rect(char_index, cw, ch, d)
  83.       pattern = @pattern < 3 ? @pattern : 1
  84.       sx = (char_index % 4 * 3 + pattern) * cw
  85.       sy = (char_index / 4 * 4 + (d - 2) / 2) * ch
  86.       Rect.new(sx, sy, cw, ch)
  87.     end
  88.  
  89.     def update
  90.       update_pattern
  91.     end
  92.  
  93.     def update_pattern
  94.       @anime_count += 1
  95.       if @anime_count > @frame_count
  96.         @pattern = (@pattern + 1) % 4
  97.         @anime_count = 0
  98.       end
  99.     end
  100.  
  101.     def changed?
  102.       @anime_count == 0
  103.     end
  104.   end
  105. end
回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
164
在线时间
415 小时
注册时间
2020-1-11
帖子
256
3
 楼主| 发表于 2021-3-30 21:44:27 | 只看该作者
alexncf125 发表于 2021-3-30 19:04
# Script:   Draw Animated Characters In Windows
# Author:   Evgenij
# Date:     07.01.2015

看起来有点复杂,让我花点时间研究一下。谢谢。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-1 08:08

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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