Project1

标题: [2VIP+]新人问题..如何解决NPC显示名字刷新滞后.. [打印本页]

作者: Eclair    时间: 2008-2-1 21:37
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-2-1 21:45
咩?其实……这个脚本本身显示名字就是在Sprite_Character里的吧?
改了他的update方法……所以改Game_Map好象不行的说
作者: Eclair    时间: 2008-2-1 21:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-2-1 21:49
哦,就是NPC移动,然后名字跟着动得慢么-v-
我觉得是刷新的时候卡住的问题……等我加脚本测试一下
作者: 水迭澜    时间: 2008-2-1 21:53
测试了,我测试的时候感觉很同步= =
是不是你那里卡了……把你的工程传我看一下吧-v-
作者: Eclair    时间: 2008-2-1 22:01
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-2-1 22:04
用你的工程测试了仍然没有问题………………
结论:是卡了吧= =
作者: Eclair    时间: 2008-2-1 22:13
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-2-1 22:14
你是说画面卷动咩…………- -
这个我也用了,也没发现有问题
作者: Eclair    时间: 2008-2-1 22:16
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-2-1 22:20
我的电脑应该没你好= =
内啥,是不是还有其他什么脚本……
其实这个显示名字的脚本就是放在Sprite_Character里的
刷新应该是同步刷新吧……真的想象不到是什么其他的问题- -
你刷新的时候FPS没有掉吗?没掉可能就是别的问题了……咩~
作者: Eclair    时间: 2008-2-1 22:22
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-2-1 22:25
……………只能归结为RP问题……= =
再次测试仍然测试不出问题来…………
抚摸……
作者: 叶子    时间: 2008-2-1 22:40
其实应该要把坐标刷新顺序放到行走图之后
#--------------------------------------------------------------------------
# ● 更新画面
#--------------------------------------------------------------------------
def update
  
  #...
  
  @namesprite.x = self.x-80
  @namesprite.y = self.y-self.oy-24

  #@namesprite.visible = $game_switches[39]
  # 设置可视状态
  self.visible = (not @character.transparent)
  # 图形是角色的情况下
  if @tile_id == 0
   # 设置传送目标的矩形
   sx = @character.pattern * @cw
   sy = (@character.direction - 2) / 2 * @ch
   self.src_rect.set(sx, sy, @cw, @ch)
  end
  # 设置脚本的坐标
  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 @character.animation_id != 0
   animation = $data_animations[@character.animation_id]
   animation(animation, true)
   @character.animation_id = 0
  end
end

以上是Sprite_Character的update
红色的地方是对@name_sprite的坐标赋值,用的是self.x和self.y作为参考。问题出在self.x和self.y是在后面蓝色的地方才进行这一帧的更新,所以@name_sprite的坐标实际上是以前一帧的self.x和self.y为参考,因而出现了延迟现象。

解决方法:可以把@name_sprite的坐标刷新放到Sprite_Character的坐标刷新之后,或者@name_sprite的坐标不以self.x和self.y为参考,直接取得@character.screen_x等(DRY原则,个人不太推荐这种方法..) [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: Eclair    时间: 2008-2-1 22:50
提示: 作者被禁止或删除 内容自动屏蔽
作者: 水迭澜    时间: 2008-2-1 22:54
我发现我们都傻了
欢乐地跑过……




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