Project1

标题: 初学脚本,错误了 [打印本页]

作者: 繁星千羽    时间: 2014-9-26 17:40
标题: 初学脚本,错误了
  1. class Show_Photo < Sprite
  2.   $Photo_Allow
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化对像
  5.   #     viewport : 显示端口
  6.   #     picture  : 图片 (Game_Picture)
  7.   #--------------------------------------------------------------------------  
  8.   def initialize(viewport,photo)
  9.     super(viewport)
  10.     [url=home.php?mod=space&uid=75283]@PHOTO[/url] = photo
  11.     update
  12.   end
  13.   
  14.   #--------------------------------------------------------------------------
  15.   # ● 释放
  16.   #--------------------------------------------------------------------------
  17.   def dispose
  18.     if @photo.bitmap != nil
  19.       @photo.bitmap.dispose
  20.     end
  21.     super
  22.   end
  23.   
  24.   def show_photo(name)
  25.     $Photo_Allow = 1
  26.     @photo=Sprite.new
  27.     @photo.name = "Graphics/Pictures/"+name
  28.     @photo.bitmap=Bitmap.new(photo.name)
  29.     @photo.ox = @photo.bitmap.width /2
  30.     @photo.oy = @photo.bitmap.height /2
  31.     @photo.x=272
  32.     @photo.y=208
  33.     loop do
  34.       self.update
  35.       if Photo_Allow ==0 then
  36.         break
  37.       end
  38.     end
  39.     dispose
  40.   end
  41. end
复制代码

作者: 你欠抽吧    时间: 2014-9-26 17:53
好歹也要自己写一个update方法啊,继承的那个只是最基础的操作
作者: 繁星千羽    时间: 2014-9-26 18:02
额……不懂……运行游戏时的错误时出现在
@photo.ox = @photo.bitmap.width /2
@photo.oy = @photo.bitmap.height /2
这两行,如果把这两行注释掉,成功运行游戏后,调用时发生错误
如:
show_photo(reimi)
出来的错误好像是说找不到reimi这个变量还是怎么样的……
作者: 你欠抽吧    时间: 2014-9-26 18:05
本帖最后由 你欠抽吧 于 2014-9-26 18:12 编辑
繁星千羽 发表于 2014-9-26 18:02
额……不懂……运行游戏时的错误时出现在
@photo.ox = @photo.bitmap.width /2
@photo.oy = @photo.bitmap ...


把你用到这个脚本的地方发出来才能知道啊


作者: 繁星千羽    时间: 2014-9-26 18:08
新游戏
事件-自动执行
脚本:(show_photo(reimi))
就这些
作者: 你欠抽吧    时间: 2014-9-26 18:13
本帖最后由 你欠抽吧 于 2014-9-26 18:24 编辑
繁星千羽 发表于 2014-9-26 18:08
新游戏
事件-自动执行
脚本:(show_photo(reimi))


28行变量参数前面要加@,35行变量前要加$
还有就是这个脚本里没办法能让$Photo_Allow等于0,所以会一直循环更新不会退出
name要加.to_s方法转换成字符串
作者: 繁星千羽    时间: 2014-9-26 18:22
$Photo_Allow那个是打算换图片的时候再改的……现在还是一样29和30行出问题,另外第10行大概是粘贴的时候出问题了,写的是@photo=photo
作者: chd114    时间: 2014-9-26 19:04
  1. class Show_Photo < Sprite
  2.   $Photo_Allow
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化对像
  5.   #     viewport : 显示端口
  6.   #     picture  : 图片 (Game_Picture)
  7.   #--------------------------------------------------------------------------  
  8.   def initialize(viewport,photo)
  9.     super(viewport)
  10.     @PHOTO=photo
  11.     update
  12.   end
  13.   
  14.   #--------------------------------------------------------------------------
  15.   # ● 释放
  16.   #--------------------------------------------------------------------------
  17.   def dispose
  18.     if @photo.bitmap != nil
  19.       @photo.bitmap.dispose
  20.     end
  21.     super
  22.   end
  23.   
  24.   def show_photo(name)
  25.     $Photo_Allow = 1
  26.     @photo=Sprite.new
  27.     @photo.name = "Graphics/Pictures/"+name
  28.     @photo.bitmap=Bitmap.new(@photo.name)
  29.     @photo.ox = @photo.bitmap.width /2
  30.     @photo.oy = @photo.bitmap.height /2
  31.     @photo.x=272
  32.     @photo.y=208
  33.     loop do
  34.       self.update
  35.       if $Photo_Allow ==0 then
  36.         break
  37.       end
  38.     end
  39.     dispose
  40.   end
  41. end
复制代码
这样试试看?
作者: 繁星千羽    时间: 2014-9-26 21:21
还是一样30行以及reimi出错QAQ,顺带新人问下回复功能的验证码看不到是什么情况……
作者: 你欠抽吧    时间: 2014-9-26 21:40
@photo.name = "Graphics/Pictures/"+name.to_s
reimi不是字符串对吧
作者: 繁星千羽    时间: 2014-9-26 21:46
……加上双引号后找不到reimi的错误没了,取而代之的是

执行脚本时发生NoMethodError。
undefined method 'show_photo' for #<Interpreter:0x279caf8>
作者: 你欠抽吧    时间: 2014-9-26 21:57
繁星千羽 发表于 2014-9-26 21:46
……加上双引号后找不到reimi的错误没了,取而代之的是

执行脚本时发生NoMethodError。

艾玛……合着你是在事件页里面直接调用一个Scene类里的方法……这个方法不是全局的啊
作者: 繁星千羽    时间: 2014-9-26 22:24
你欠抽吧 发表于 2014-9-26 21:57
艾玛……合着你是在事件页里面直接调用一个Scene类里的方法……这个方法不是全局的啊 ...

额额,那么应该怎么做呢?
作者: 芯☆淡茹水    时间: 2014-9-27 09:46
瞎写一下,又没办法测试
  1. class Show_Photo < Sprite
  2.   $Photo_Allow
  3.   #--------------------------------------------------------------------------
  4.   # ● 初始化对像
  5.   #     viewport : 显示端口
  6.   #     picture  : 图片 (Game_Picture)
  7.   #--------------------------------------------------------------------------  
  8.   def initialize(viewport,photo)
  9.     super(viewport)
  10.     [url=home.php?mod=space&uid=75283]@PHOTO[/url] = photo
  11.     update
  12.   end
  13.   
  14.   #--------------------------------------------------------------------------
  15.   # ● 释放
  16.   #--------------------------------------------------------------------------
  17.   def dispose
  18.     if self.bitmap != nil
  19.       self.bitmap.dispose
  20.     end
  21.     super
  22.   end
  23.   
  24.   def show_photo(name)
  25.     $Photo_Allow = 1
  26.     self.bitmap = Bitmap.new("Graphics/Pictures/#{name}")
  27.     self.ox = self.bitmap.width /2
  28.     self.oy = self.bitmap.height /2
  29.     self.x=272
  30.     self.y=208
  31.   end
  32.   
  33.   def update
  34.     super
  35.     if Photo_Allow == 0
  36.       dispose
  37.       return
  38.     end
  39.     self.x=272
  40.     self.y=208
  41.   end
  42.   
  43. end
复制代码

作者: 你欠抽吧    时间: 2014-9-27 09:58
繁星千羽 发表于 2014-9-26 22:24
额额,那么应该怎么做呢?

那要看你想在哪里用这个方法了,你要创建一个Scene然后再调用show_photo
作者: RyanBern    时间: 2014-9-27 10:23
本帖最后由 RyanBern 于 2014-9-27 13:32 编辑

大致看了一下,LZ想要的效果类似于事件中的“显示图片”,不过是用脚本的方法。在游戏执行的某个时刻,调用方法'show_photo'来让照片显示出来。当然显示的时候会有什么淡入淡出效果。
然后就是写这个的思路,你可以建立一个Sprite的子类,然后重写里面的各种方法。不过你这加一个@photo的实例变量是什么意思啊?感觉完全没有必要。然后就是注意方法的调用,如果你定义为一个普通方法,那么一定要用一个该类的对象调用它而不能直接调用它。如果要直接调用,就要把show_photo方法定义到外面去。
废话少说,这个可以拿来参考:
RUBY 代码复制
  1. class Show_Photo < Sprite
  2.   def initialize(viewport = nil)
  3.     super(viewport)
  4.     @picture_name = ""
  5.   end
  6.   def show(picture_name)
  7.     if @picture_name != picture_name
  8.       @picture_name = picture_name
  9.       if self.bitmap != nil
  10.         self.bitmap.dispose
  11.       end
  12.       self.bitmap = RPG::Cache.picture(@picture_name)
  13.     end
  14.     self.opacity = 0
  15.     self.ox = self.bitmap.width / 2
  16.     self.oy = self.bitmap.height / 2
  17.     self.x = 272
  18.     self.y = 208
  19.     16.times do
  20.       self.opacity += 16
  21.       Graphics.update
  22.     end
  23.   end
  24.   def fade
  25.     16.times do
  26.       self.opacity -= 16
  27.       Graphics.update
  28.     end
  29.   end
  30. end

使用方法:可以利用事件脚本进行调用,要借助一个全局变量。
$photo = Show_Photo.new
# 淡入显示"1.png"
$photo.show("1.png")
如果显示结束了,可以利用$photo.fade达到淡出的作用
作者: 繁星千羽    时间: 2014-9-27 11:38
本帖最后由 繁星千羽 于 2014-9-27 11:39 编辑
RyanBern 发表于 2014-9-27 10:23
大致看了一下,LZ想要的效果类似于事件中的“显示图片”,不过是用脚本的方法。在游戏执行的某个时刻,调用 ...


15、16行显示 发生了 SyntaxError

执行脚本
$photo = Show_Photo.new
$photo.show("reimi.png")
显示
执行脚本时发生ArgumentError。
wrong number of arguments(1 for 0)


#----------------------------------------------
顺带关于那个教程里面水瓶的作业……帮忙看一下
  1. #*********************************************
  2. #练习1
  3. #*********************************************
  4. class Bottle
  5.   def intialize(volume_max)
  6.     @volume_max=volume_max+0
  7.     @volume_now = 0
  8.   end

  9.   def volume(name)
  10.     volume_now = self.volume_now
  11.     print "The "+ name +"'s volume is "+volume_now
  12.   end
  13.   
  14.   def full(name)
  15.     self.volume_now = self.volume_max
  16.   end
  17.   
  18.   def clear(name)
  19.     self.volume_now = 0
  20.   end
  21.   
  22.   #将B倒进A
  23.   def pour(nameA,nameB)
  24.     if nameA.volume_now <nameA.volume_max and nameB.volume_now>0 then
  25.       if nameA.volume_max - nameA.volume_now >nameB.volume_now then
  26.         #假如A瓶的剩余容量大于B瓶现量
  27.         #使A瓶现量+B瓶现量
  28.         #使B瓶现量为0
  29.         nameA.volume_now = nameA.volume_now+nameB.volume_now
  30.         nameB.volume_now = 0
  31.       else
  32.         #否则
  33.         #使B瓶现量减少A瓶剩余量
  34.         #使A瓶现量为满
  35.         nameB.volume_now = nameB.volume_now - (nameA.volume_max-nameA.volume_now)
  36.         nameA.volume_now = nameA.volume_max
  37.       end
  38.     end
  39.   end
  40. end
复制代码
用脚本
$bottle1 = Bottle.new(200)
$bottle1.full
$bottle1.volume

显示
执行脚本时发生ArgumentError。
wrong number of arguments(1 for 0)
作者: taroxd    时间: 2014-9-27 11:45
繁星千羽 发表于 2014-9-27 11:38
15、16行显示 发生了 SyntaxError

执行脚本


错误太多,懒得一一列举了。再去好好学习什么是类、什么是方法吧。
作者: 繁星千羽    时间: 2014-9-27 11:57
taroxd 发表于 2014-9-27 11:45
错误太多,懒得一一列举了。再去好好学习什么是类、什么是方法吧。

对不起,我还是一个人看教程研究好了……给你们添麻烦了




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