Project1

标题: 人物脚下阴影 [打印本页]

作者: 水迭澜    时间: 2008-3-7 05:19
标题: 人物脚下阴影
在新手区看到这个问题就写了。

  1. #X,Y,宽度,高度的偏移值
  2. FIX_X = 0
  3. FIX_Y = 0
  4. FIX_WIDTH = 0
  5. FIX_HEIGHT = 0

  6. class Sprite_Character < RPG::Sprite
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     viewport  : 查看端口
  10.   #     character : 角色 (Game_Character)
  11.   #--------------------------------------------------------------------------
  12.   alias new_initialize initialize
  13.     def initialize(viewport, character = nil)
  14.       @shadow = Sprite.new(viewport)
  15.       new_initialize(viewport, character)
  16.     end
  17.   def dispose
  18.     @shadow.dispose
  19.     super
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 更新画面
  23.   #--------------------------------------------------------------------------
  24.   alias new_update update
  25.   def update
  26.       # 元件 ID 为有效值的情况下
  27.       if @character.tile_id < 384
  28.         tmp_bitmap = RPG::Cache.character(@character.character_name,
  29.           @character.character_hue)
  30.         @shadow.bitmap = Bitmap.new(tmp_bitmap.width/4, tmp_bitmap.height/8)
  31.         @shadow.bitmap.draw_oval(0,0,tmp_bitmap.width/4+FIX_WIDTH,tmp_bitmap.height/8+FIX_HEIGHT,Color.new(0,0,0,64))
  32.       end
  33.     new_update
  34.     @shadow.visible = self.visible
  35.     @shadow.opacity = self.opacity
  36.     @shadow.z = self.z-1
  37.     @shadow.x = self.x - self.bitmap.width/8 + FIX_X
  38.     @shadow.y = self.y - @shadow.bitmap.height/8 - self.y / 20 + FIX_Y
  39.   end
  40. end
复制代码

  1. class Bitmap
  2. # 描绘椭圆
  3. # 在矩形(x, y, width, height)里,用色color(Color)描绘椭圆。
  4. def draw_oval(x, y, width, height, color)
  5.    a = width / 2
  6.    b = height / 2
  7.    x += a
  8.    y += b
  9.    xmax = a * 4 / 5 #这里可以进行更改
  10.    xmin = -xmax
  11.    ymax = (Math.sqrt((1 - xmax**2 / a**2.to_f) * b**2)).round
  12.    ymin = -ymax
  13.    for mx in xmin..xmax
  14.      my = Math.sqrt((1 - mx**2 / a**2.to_f) * b**2)
  15.      fill_rect(mx+x, -my+y, 1, my*2,color)
  16.    end
  17.    for my in ymin..ymax
  18.      mx = Math.sqrt((1 - my**2 / b**2.to_f) * a**2)
  19.      fill_rect(-mx+x, my+y, mx*2, 1,color)
  20.    end
  21. end
  22. end
复制代码


椭圆很难看,算法问题。= =

              [本贴由 风雪优游 于 2008-4-5 20:54:45 进行了编辑]
作者: 沉影不器    时间: 2008-3-7 05:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-3-7 05:27
对。那个我忘记删除掉了= =
哎……本来要改也不是不可以……只是懒得改……

飘去做作业

作者: 美兽    时间: 2008-3-7 06:09
娘娘疏漏于此:

      @shadow = Sprite.new(viewport)

作者: 水迭澜    时间: 2008-3-7 06:25
我刚刚就想到这个=       =
其实之前压根不知道一个viewport里也可以有z值差异的……
啊啊啊你居然在我自己修改之前说出来了(指)
作者: 神思    时间: 2008-3-7 15:33
其实那个影子可以用图片代替的啊…何苦一定要用程序画呢…
作者: 沉影不器    时间: 2008-3-7 15:48
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-3-7 22:28
以下引用神思于2008-3-7 7:33:13的发言:
其实那个影子可以用图片代替的啊…何苦一定要用程序画呢…

因为楼主有病= =bb
TO LS:可能用了地形标志?
作者: 小角色    时间: 2008-3-8 00:57
呃...问一下楼主
如果用到重力脚本 影子会随角色跳跃而跳跃吗?
作者: 水迭澜    时间: 2008-3-8 01:59
明显不会……
作者: 尜溝爺    时间: 2008-3-8 04:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: link006007    时间: 2008-3-8 04:18
以下引用沉影不器于2008-3-7 7:48:21的发言:


以下引用神思于2008-3-7 7:33:13的发言:

其实那个影子可以用图片代替的啊…何苦一定要用程序画呢…

因为有兴趣

不知道地图上怎么认水边,要不可以改成水边显示倒影了

以前我问过这类问题呢
不追求那些边边角角的问题的话, 判断地形标志
直接应用一个人物的精灵翻转再旋转, 其中旋转只要一次

对于那些不满32X32的格子 只好自己建图层或者添像素了...
作者: 水迭澜    时间: 2008-3-8 20:11
嗯,其实作者写这个是写着好玩的...
真正的效果还是建议用图片做= =




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