Project1

标题: 谁能帮我把幻影脚本的BUG给破了 [打印本页]

作者: cymcrh55    时间: 2009-10-1 08:54
提示: 作者被禁止或删除 内容自动屏蔽
作者: 大东    时间: 2009-10-1 10:41
虽然我想帮忙!可我能力有限啊!
作者: cymcrh55    时间: 2009-10-1 13:33
提示: 作者被禁止或删除 内容自动屏蔽
作者: huazi922    时间: 2009-10-1 16:48
菜鸟还不懂!等我会了在告诉你 :lol
作者: 神思    时间: 2009-10-1 17:54
这好像是当初我写给彩虹的脚本。也不知你是怎么来的。不过的确是有这个问题。看看什么时候帮你改改。
作者: 神思    时间: 2009-10-1 17:58
有个很纳闷的问题。这的确是我写给彩虹的东西。但是别名变量的名字被改掉了。我靠!。不声明作者。又把变量名改掉!!!
作者: 胖达达人    时间: 2009-10-1 18:00
难怪我想……为什么LZ能想出这种XD的一步一幻影机制,然后还有个没人碰的dir8和一个||=……
原来如此……
(screen_x只捕捉到了display_x修改以后的x,这是根源)
(另外,实时update不浪费资源吗……)
作者: tommay    时间: 2009-10-1 18:02
alias initialize_naiyoudadangao  initialize
想出名者往往作茧自缚
作者: 神思    时间: 2009-10-1 18:06
其实定义一个幻影的结构体。包含实际坐标。然后在updata里从新计算屏幕坐标。
作者: 胖达达人    时间: 2009-10-1 18:10
本帖最后由 胖达达人 于 2009-10-1 18:13 编辑

在initialize的时候,Game_Map已经刷新……所以在screen_x的时候其实display_x已经被修改。又由于移动的时候主角只是在屏幕不变位置,地图在滚动,所以screen_x一再得到不变的值。
今天上午纠结了半个多小时没纠结出来……= =
作者: cymcrh55    时间: 2009-10-1 18:28
提示: 作者被禁止或删除 内容自动屏蔽
作者: 凌辰    时间: 2009-10-1 18:38
哈哈!那个弗洛多的头像不就是神思的旧头像嘛。
作者: 神思    时间: 2009-10-1 18:51
弗洛多就是在下=_=!
作者: 凌辰    时间: 2009-10-1 18:53
连邮箱的填写方式都相同,而且下面就有神思的回复。
用膝盖都猜得出是小号吧~
作者: cymcrh55    时间: 2009-10-1 19:00
提示: 作者被禁止或删除 内容自动屏蔽
作者: 神思    时间: 2009-10-1 19:45
问个问题。这脚本你是从哪来的?
作者: b87733263    时间: 2009-10-1 21:10
提示: 作者被禁止或删除 内容自动屏蔽
作者: 神思    时间: 2009-10-1 22:59
-_________-一时激动。。。望见谅。
  1. class Game_Player < Game_Character

  2.   def mirage(opacity)

  3.     $scene.spriteset.mirage(self, opacity)

  4.   end

  5.   alias update_naiyoudadangao update

  6.     def update

  7.     update_naiyoudadangao

  8.     if Input.dir8 != 0

  9.     mirage(120)  

  10.     end

  11.     end

  12.   end

  13. class Sprite_MirageCharacter < RPG::Sprite

  14.   attr_accessor :character            

  15.   def initialize(viewport, opacity, character = nil)

  16.     super(viewport)

  17.     @character = character

  18.     self.opacity = opacity

  19.     update

  20.   end

  21.   def update

  22.     super

  23.     if @tile_id != @character.tile_id or

  24.        @character_name != @character.character_name or

  25.        @character_hue != @character.character_hue

  26.       @tile_id = @character.tile_id

  27.       @character_name = @character.character_name

  28.       @character_hue = @character.character_hue

  29.       if @tile_id >= 384

  30.         self.bitmap = RPG::Cache.tile($game_map.tileset_name,

  31.           @tile_id, @character.character_hue)

  32.         self.src_rect.set(0, 0, 32, 32)

  33.         self.ox = 16

  34.         self.oy = 32

  35.       else

  36.         self.bitmap = RPG::Cache.character(@character.character_name,

  37.           @character.character_hue)

  38.         @cw = bitmap.width / 4

  39.         @ch = bitmap.height / 4

  40.         self.ox = @cw / 2

  41.         self.oy = @ch

  42.         self.x = @character.screen_x

  43.         self.y = @character.screen_y

  44.       end

  45.     end

  46.     self.visible = (not @character.transparent)

  47.     if @tile_id == 0 and !@t

  48.       sx = @character.pattern * @cw

  49.       sy = (@character.direction - 2) / 2 * @ch

  50.       self.src_rect.set(sx, sy, @cw, @ch)

  51.       @t = true

  52.     end

  53.     self.z = @character.screen_z(@ch)

  54.     self.color.set(0,0,170,120)

  55.     self.opacity -= 5

  56.     self.blend_type = 1

  57.     self.bush_depth = @character.bush_depth

  58.     if @character.animation_id != 0

  59.       animation = $data_animations[@character.animation_id]

  60.       animation(animation, true)

  61.       @character.animation_id = 0

  62.     end

  63.   end

  64. end



  65. class Spriteset_Map

  66.   alias initialize_naiyoudadangao  initialize

  67.   def initialize

  68.     @mirage = {}

  69.     initialize_naiyoudadangao   

  70.   end

  71.   def mirage(obj, opacity)

  72.     @mirage[obj] ||= []
  73.    
  74.     smc = Sprite_MirageCharacter.new(@viewport1, opacity, obj)
  75.    
  76.     @mirage[obj] << Mirage.new(obj.real_x, obj.real_y, smc)#(Sprite_MirageCharacter.new(@viewport1, opacity, obj))

  77.   end



  78. alias update_naiyoudadangao update

  79. def update

  80.    update_naiyoudadangao

  81.     for value in @mirage.values

  82.       for v in value

  83.         
  84.         v.smc.x = (v.x - $game_map.display_x + 3) / 4 + 16
  85.         
  86.         v.smc.y = (v.y - $game_map.display_y + 3) / 4 + 32
  87.         
  88.         
  89.         v.smc.update

  90.         if v.smc.opacity <= 0

  91.           v.smc.dispose

  92.           value.delete(v)

  93.         end

  94.       end

  95.     end

  96.   end

  97. end

  98. class Scene_Map

  99.   attr_reader   :spriteset

  100. end

  101. Mirage = Struct.new(:x, :y, :smc)
复制代码

作者: enter9009    时间: 2009-10-1 23:02
.......老早以前就想体验这个脚本了,但能力有限,突破不了!
现在发现神思出现了,快快填坑吧!!
作者: 神思    时间: 2009-10-1 23:06
已修复大地图的问题 = =|||||||||
作者: cymcrh55    时间: 2009-10-2 08:05
提示: 作者被禁止或删除 内容自动屏蔽




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