secondsen 发表于 2010-6-29 19:01:42

你这个影子是倒立的。。。他的是正立的。。。我先吃饭,等会试试。。。默认脚本似乎没有这个功能,我要看看。。。我做的算法可能会很慢啊。。。等会再说吧

liqunsz 发表于 2010-6-29 19:49:57

虽然这种算法我不会做,但是要说一下,你的示意图有一些显而易见的错误……影子叠了……反而跑到行走图上面去了……
版大说的影子方向是因为光源的问题了……如果版大还能研制出动态的影子那就…………神了……

secondsen 发表于 2010-6-29 19:54:17

这个东西我放弃了。。。我突然想起来 你是八方向的。。。无法兼容,此其一。。其二脚本速度比较慢,倒不是掉帧的问题,只是初始化的时间长

我1.66GHZ双核256MB内存。。。集成显卡 一个 128X196的行走图 是 0.125秒。所以我做了一半就不做了。。。可以给你看看脚本

secondsen 发表于 2010-6-29 19:54:24

覆盖同名脚本

#==============================================================================
# ■ Sprite_Character
#------------------------------------------------------------------------------
#  角色显示用脚本。监视 Game_Character 类的实例、
# 自动变化脚本状态。
#==============================================================================

class Sprite_Character < RPG::Sprite
#--------------------------------------------------------------------------
# ● 定义实例变量
#--------------------------------------------------------------------------
attr_accessor :character                # 角色
#--------------------------------------------------------------------------
# ● 初始化对像
#   viewport: 查看端口
#   character : 角色 (Game_Character)
#--------------------------------------------------------------------------
def initialize(viewport, character = nil)
    super(viewport)
    @character = character
    update
    @shadow = Sprite.new
    if @character.character_name != ""
      w = self.bitmap.width
      h = self.bitmap.height
      @shadow.bitmap = Bitmap.new(w,h)
      c = Color.new(0,0,0,160)
      for i in 0...w
      for j in 0...h
          if self.bitmap.get_pixel(i,j).alpha!=0
            @shadow.bitmap.set_pixel(i, h-1-j, c)
          end
      end
      end
    end
    @shadow.ox = self.ox
    @shadow.z = self.z
end
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
    super
    # 元件 ID、文件名、色相与现在的情况存在差异的情况下
    if @tile_id != @character.tile_id or
       @character_name != @character.character_name or
       @character_hue != @character.character_hue
      # 记忆元件 ID 与文件名、色相
      @tile_id = @character.tile_id
      @character_name = @character.character_name
      @character_hue = @character.character_hue
      # 元件 ID 为有效值的情况下
      if @tile_id >= 384
      self.bitmap = RPG::Cache.tile($game_map.tileset_name,
          @tile_id, @character.character_hue)
      self.src_rect.set(0, 0, 32, 32)
      self.ox = 16
      self.oy = 32
      # 元件 ID 为无效值的情况下
      else
      self.bitmap = RPG::Cache.character(@character.character_name,
          @character.character_hue)
      @cw = bitmap.width / 4
      @ch = bitmap.height / 4
      self.ox = @cw / 2
      self.oy = @ch
      end
    end
    # 设置可视状态
    self.visible = (not @character.transparent)
    # 图形是角色的情况下
    # 设置脚本的坐标
    self.x = @character.screen_x
    self.y = @character.screen_y
    self.z = @character.screen_z(@ch)
    # 设置不透明度、合成方式、茂密
    self.opacity = @character.opacity
    self.blend_type = @character.blend_type
    self.bush_depth = @character.bush_depth
    if @tile_id == 0
      # 设置传送目标的矩形
      sx = @character.pattern * @cw
      sy = (@character.direction - 2) / 2 * @ch
      self.src_rect.set(sx, sy, @cw, @ch)
      if @shadow
      sx = @character.pattern * @cw
      sy = (8 - @character.direction) / 2 * @ch
      @shadow.src_rect.set(sx, sy, @cw, @ch)
      @shadow.x = self.x
      @shadow.ox = self.ox
      @shadow.y = self.y
      @shadow.z = self.z
      @shadow.opacity = self.opacity
      @shadow.blend_type = self.blend_type
      @shadow.bush_depth = self.bush_depth
      end
    end
    # 动画
    if @character.animation_id != 0
      animation = $data_animations[@character.animation_id]
      animation(animation, true)
      @character.animation_id = 0
    end
end
end

liqunsz 发表于 2010-6-29 20:05:22

………………腿神大我彻底彻底的服了…………
速度与质量兼备啊…………我完全没看出来有卡帧的…………
但是进入菜单界面,阴影仍继续存在……
而且阴影会遮挡其他NPC
我试了一下,4个NPC,速度和频率都不同
反正尽量不用两个值都为6的速度还可以
阴影跟角色脚的距离有点开,阴影透明度应该稍微淡

secondsen 发表于 2010-6-29 20:10:58

这个东西是半成品。。。我都说了这个东西有问题啊。。。这个完全不会卡祯。。。我只是说这个东西可能和八方向不兼容,并且初始化的时间长啊

88510051as 发表于 2010-6-29 20:35:04

回 23楼(secondsen) 的帖子

是啊 在人物是八方行走时 打开游戏突然卡了一下 但是人物的八方和影子不同的还有人物和影子的距离 离的远啊

88510051as 发表于 2010-6-29 20:36:51

哪么 正立和倒立的影子 用谁最好呢 你们想想吧

liqunsz 发表于 2010-6-29 20:41:31

回 25楼(secondsen) 的帖子

我说了我电脑上没有初始化的事件的说……
1.86Ghz的CPU双核 2G内存 8600GT
07年的机子了……一点事没有……
RM好像不会硬解码一类的,我觉得跟显存有关系?

secondsen 发表于 2010-6-29 21:05:20

应该CPU的问题。。。另外,只要有事件就会有初始化。。。你能看到影子就一定有事件。有事件,事件刚生成时会初始化。。。也就是换地图屏幕会变黑的那段时间里进行。

倒立影子要考虑优先级。。。当然是正立的简单。。。这个东西LZ是八方脚本就需要专门定做,自求多福吧
页: 1 2 [3] 4
查看完整版本: 如何让人物的行走图带有影子