Project1

标题: 绘制血条时发生了奇怪的事情…… [打印本页]

作者: sjkd34    时间: 2009-1-28 03:33
标题: 绘制血条时发生了奇怪的事情……
刚刚看了血槽绘制的教学录像,于是学着去画了一个

新的脚本:
def HP(actor,x,y)
  @bitmap1 =Bitmap.new("Graphics/Pictures/HP.png")
  w1 = @bitmap1.width * actor.hp/actor.maxhp
  @src_rect1 = Rect.new(0,0,w1,@bitmap1.height)
  self.contents.blt(x,y,@bitmap1,@src_rect1)
end  

def SP(actor,x,y)
  @bitmap2 =Bitmap.new("Graphics/Pictures/SP.png")
  w2 = @bitmap2.width * actor.sp/actor.maxsp
  @src_rect2 = Rect.new(0,0,w2,@bitmap2.height)
  self.contents.blt(x,y,@bitmap2,@src_rect2)
end  


Window_BattleStatus里改的

def refresh
    self.contents.clear
    @item_max = $game_party.actors.size
    for i in 0...$game_party.actors.size
      actor = $game_party.actors
      actor_x = i * 160 + 4
      draw_actor_name(actor, actor_x, 0)
      HP(actor,actor_x,32)
      SP(actor,actor_x,64)
      if @level_up_flags
        self.contents.font.color = normal_color
        self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
      else
        draw_actor_state(actor, actor_x, 96)
      end
    end
  end



好,我们运行……???



神奇的是,我无论怎么换图片,他都只是一个绿色的槽,好吧,我可能在别的地方重新定义了一下,但是怎么查找都没有,也没有用关于血槽的插件脚本……

接着更神奇,我改了一下这个:
HP(actor,actor_x,32)
变为
HP(actor,actor_x,10)




要知道,我定义的可是这个,是一张图片!!!
def HP(actor,x,y)
  @bitmap1 =Bitmap.new("Graphics/Pictures/HP.png")
  w1 = @bitmap1.width * actor.hp/actor.maxhp
  @src_rect1 = Rect.new(0,0,w1,@bitmap1.height)
  self.contents.blt(x,y,@bitmap1,@src_rect1)
end  
而不是一个绿色的槽!

怎么回事?本人新手,大惊小怪之处请见谅

作者: 亿万星辰    时间: 2009-1-28 03:54
方便的话来个工程吧{/dy}

下面写一些我对于这类灵异问题的解决方法。

1、它不是灵异么?让它灵异到底!
现在放在工程里的是一个矩形的图片么?改!改成不规则型的,然后在运行看看,如果还是与图片大小相同的一个矩形,那么多半可以确认,你的@bitmap1在某处还做过了fill_rect的处理。

2、为bitmap执行blt方法时,那个图形用临时变量就足矣了。
pic = RPG::Cache.picture("hp")
self.contents.blt(0, 0, pic, Rect.new(0, 0, pic.width, pic.height))
同样的,这也是为了防止上面1里所描述的问题的出现,也许你在其他地方还对@bitmap1做了处理,但如果像现在这样,方法结束以后,pic就可以认为已经不存在了,也就不怕再出什么问题了。 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: sjkd34    时间: 2009-1-28 04:02
这样子不行么……
作者: 亿万星辰    时间: 2009-1-28 04:17
你再看看吧!
作者: 后知后觉    时间: 2009-1-28 04:30
用最常规的写法写一次吧 吧@这个东西去掉
def HP(actor,x,y)
bitmap = Bitmap.new("Graphics/Pictures/HP")
w1 = bitmap.width * actor.hp / actor.maxhp
rect = Rect.new(0,0,w1,bitmap.height)
self.contents.blt(x,y,bitmap,rect)
end  
定义这样的方法用局部变量就好了.要最大程度的减少干扰才好

def SP(actor,x,y)
  pic = RPG::Cache.picture("sp")
  w2 = pic.width * actor.sp / actor.maxsp
  self.contents.blt(0, 0, pic, Rect.new(0, 0, w2, pic.height))
end
作者: sjkd34    时间: 2009-1-28 04:47
照旧……难道真的出了什么问题?
作者: 后知后觉    时间: 2009-1-28 05:05
那还真的称灵异事件了。。。
重新检查你的图片
然后直接显示图片,不要和HP/SP挂钩
def HP(actor,x,y)
bitmap = Bitmap.new("Graphics/Pictures/HP")
w1 = bitmap.width
rect = Rect.new(0,0,w1,bitmap.height)
self.contents.blt(x,y,bitmap,rect)
end
def SP(actor,x,y)
pic = RPG::Cache.picture("sp")
w2 = pic.width
self.contents.blt(0, 0, pic, Rect.new(0, 0, w2, pic.height))
end
如果这样还是那个样子的话就无法了,吧工程发上来
让上面那位大大帮你看看……
或者是重新开个新工程在新工程里试试
作者: sjkd34    时间: 2009-1-28 05:34
新工程是没事的,但我想不出什么东西能只定义一个HP槽……
作者: 后知后觉    时间: 2009-1-28 05:45
既然新工程里是正确的那就是你自己工程里什么地方被重新定义了
按理说,方法里使用局部变量应该不会和别的方法起冲突才对
@这个东西可别随随便便就给一些不是大范围使用的变量带上
作者: sjkd34    时间: 2009-1-28 05:50
问题是到现在我用的都是插件脚本,如果是血槽的话,HP和SP应该是一起被定义不是?况且这还是个绿条子……
作者: 后知后觉    时间: 2009-1-28 06:03
以下引用亿万星辰于2009-1-27 19:54:44的发言:

方便的话来个工程吧

下面写一些我对于这类灵异问题的解决方法。

1、它不是灵异么?让它灵异到底!
现在放在工程里的是一个矩形的图片么?改!改成不规则型的,然后在运行看看,如果还是与图片大小相同的一个矩形,那么多半可以确认,你的@bitmap1在某处还做过了fill_rect的处理。

像这样做一下试试,重新换一张图片,然后关闭工程再重新打开
然后再像上面我说的那样吧那些@全部去掉
这样这样没效果的话,如果你方便的话,也就只有放工程上来了
[LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: ★_茄孓    时间: 2009-1-28 06:15
某处被重定义吧.否则就是图片问题了`
发你那出错工程上来方便大家解决
作者: 后知后觉    时间: 2009-1-28 06:23
这个导入图片……
我不知道别人是不是这样 反正我是遇到过
要把一张图片导入到工程文件夹下,有时候想偷懒就直接
在磁盘里面操作,而不是用RM自带的导入功能进行导入
在这样的情况下,需要重新打开工程,以这样方式导入的图片才正常
作者: sjkd34    时间: 2009-1-28 06:31
那张图片很大的……和下面的那个绿条一样长,不过很宽……

总不会一张处理一张未处理吧?

上传就没办法了,我这里网速超慢的,想看个网页也麻烦啊(小区宽带……)

算了,到明天还无法解决的话就干脆用插件脚本(KUSO!好不容易想自己写个的说←口胡其实你是照抄的吧!)

只能把插件脚本一个一个删掉再看看
作者: 亿万星辰    时间: 2009-1-28 07:01
你可能在某个地方就已经把这张图片载入为一个bitmap类的对象,然后又对这个对象做了若干的处理,就好比下面这个样子

somewhere = RPG::Cache.picture("hp")
somewhere.fill_rect(0, 0, 20, 4, Color.new(0, 0, 255))
......
bitmap = Bitmap.new(640, 480)
pic = RPG::Cache.picture("hp")
bitmap.blt(0, 0, pic, Rect.new(0, 0, pic.width, pic.height))

另外就是检查下你的同名文件情况,是不是有hp.jpg,hp.png这样的情况发生
作者: 玄月    时间: 2009-1-28 09:18
亿万来了,我也不插嘴了。
话说我就是自己画血条的,也没出错过。
作者: sjkd34    时间: 2009-1-28 16:30
解决了!
原来我的血条图片在RPGMAKER文件夹下有,自己的工程那里也有(不过是根绿色的),导致脚本调用的图片出错,谢谢大家对我的帮助!




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