ランキング機能でバグ出てしまいます><(質問掲示板

投稿: 002 1  mini ugonight 投稿:2012/09/18 17:16:18(最新:2012/09/22 12:26:22)
勝手ながら「因数分解の練習(キラッ」というゲームを非公開させていただき
ランキング機能を追加しようとしているのですが
エラーが出てしまって手詰まりしてしまいました><

一応、全体のシーンは公開しておいたのですが
シーン


因数分解



具体的な症状は「ランキング」チャプターの
#名前登録
def hiscore()
speak("おめでとうございます!\n記録を更新しました!")
case speakWithSelect(2,"はい","いいえ", 
    "ハイスコアを記録しますか?")
  when 0
    #「,」で区切った文字列を"DispKeySetting"に引数として設定
    setVariable("DispKeySetting", "登録する名前を入力しえください,15,青,24103,名無しさん")
    #第1引数:画面上部の表示文字列
    #第2引数:入力可能文字数(最大24)
    #第3引数:背景色設定(白、黒、赤、桃、紫、青、緑、黄のいずれか)
    #第4引数:シーン2のID番号
    #第5引数:キャンセルした場合の入力結果
    changeScene(19491) #スクリーンキーボードへ

end

#記録を更新したか確認
def rankh()
 if isLogin()
   waitTime(1000)
   case getVariable("timeUp")
     when "10秒"
       if getVariable("taCount") > loadGameData("10s_score")
         hiscore()
       end
     when "100秒"
       if getVariable("taCount") > loadGameData("100s_score")
         hiscore()
       end
     when "3分"
       if getVariable("taCount") > loadGameData("3m_score")
         hiscore()
       end
     when "5分"
       if getVariable("taCount") > loadGameData("5m_score")
         hiscore()
       end
     when "10分"
       if getVariable("taCount") > loadGameData("10m_score")
         hiscore()
       end
   end
 end
end


の部分を呼び出したときに
Error #1069
null

というエラーが出てしまうといったのもです。

余裕があるときで構わないので、見てくれるとありがたいです><

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Orichara01 2 700x700  mini ラジアン(投稿日:2012/09/19 19:38, 履歴)
line()の関数の中では、
line[g]の中身が無いときに、createSprite()でスプライトを生成して、line[g]の中に数値が入ります。

ですが、「スクリーンキーボード」から戻ってきたときに、deleteAllSpriteでスプライトをすべて削除しています。
そのとき、スプライトが消えてもline[g]の中の数値はそのままです。

よって、line()の関数をもう一度通ったときに、
line[g]の中身があるため、スプライトが無いのにスプライトが生成されず、「setSpritePosition()でスプライトID(=ハンドル1)がないですよ」というエラーが出てしまいます。


たぶん、こんな感じだと思います。
002 1  mini ugonight(投稿日:2012/09/20 17:48, 履歴)
有難うございますっ

えっと…
「スクリーンキーボード」から戻ってきたときに、deleteAllSpriteでスプライトをすべて削除しています。

とのことですが、どこで消してるのかよくわからないです…
ほんとは消すつもりはないのですけど、具体的にどこで消してしまっているかわかりますでしょうか…?
Orichara01 2 700x700  mini ラジアン(投稿日:2012/09/20 22:03, 履歴)
deleteAllSpriteがあるのは、「スクリーンキーボード」の最後らへんですよ。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/09/21 18:36, 履歴)
確かに、スクリーンキーボード内で
deleteAllSprite関数を使用しております。

ただし、
deleteAllSprite関数に関係なく
シーンの移動後に
各シーンのスプライトIDは
リセットされるため、
どちらにしても再度生成する必要があります。


このとき、line関数では通常変数"line"に
既に使用された線引きIDに値が入っていると
正常に生成されない仕様となっているようなので、

スクリーンキーボードに入る前と
スクリーンキーボードに入った後で、
別の線引きIDを引数に設定する必要があります。
Orichara01 2 700x700  mini ラジアン(投稿日:2012/09/21 23:04, 履歴)
deleteAllSpriteがあるからだと思ってました。

シーン移動後は、どちらにしろ消えるのですね。
シーンを使ったこと無かったので知らなかったです・・・
002 1  mini ugonight(投稿日:2012/09/22 12:26, 履歴)
有難うございます
ご迷惑をおかけしてすみませんでした><

線引きIDというのは
line(線番号,x1,y1,x2,y2) 

の線番号のことでしょうか…?

一応「chapter0」を
#一度シーンを読み込んだことがあるなら
if getVariable("start")
  setVariable("lines", getVariable("lines") + 1)
  line(getVariable("lines"),64,200,164,200) 
  rankw()
else
#テキスト表示領域を用意します。
setTextFontSize(30)
setVariable("textID", createText(64, 64, 300, 35))
setVariable("textID2", createText(64, 64 + 100, 100, 35))
setVariable("textID3", createText(64 + 110, 64 + 100, 100, 35))
setVariable("textID4", createText(400, 200, 100, 35))
setVariable("textID5", createText(400, 300, 200, 35))
setVariable("textID6", createText(64, 500, 200, 35))
setVariable("textID7", createText(265, 500, 300, 35))

makeQuestion()
#setText(getVariable("textID2"), toString(getVariable("a")))
#setText(getVariable("textID3"), toString(getVariable("b")))
#setText(getVariable("textID4"), "正解!")

setVariable("stb", 0)
setVariable("tba", 0)
setVariable("tbb", 0)
setText(getVariable("textID2"), toString(getVariable("tba")))
setText(getVariable("textID3"), toString(getVariable("tbb")))


setVariable("lines", 0)
  line(getVariable("lines"),64,200,164,200) 
  #line(0,165,200,265,200) 

setVariable("count", 0)
setFlag("timeAttack", false)
setVariable("taCount", 0)
setVariable("time", 10000)
setVariable("timeUp", "10秒")

setText(getVariable("textID6"), "全体:" + toString(getVariable("count")) + "問")

setFlag("start", true)

end

という風に直したのですが
同じエラーが出てきました><
002 1  mini ugonight(投稿日:2012/09/19 17:21, 履歴)
すみません><
またエラーが出てしましました…

スクリーンキーボードから戻ってくるときに
setSpriteRotationに不正なハンドルが指定されました。ハンドル1は無効です。 line : 15
setSpritePositionに不正なハンドルが指定されました。ハンドル1は無効です。 line : 16
setSpritePositionに不正なハンドルが指定されました。ハンドル1は無効です。 line : 17
setSpriteRotationに不正なハンドルが指定されました。ハンドル1は無効です。 line : 15
setSpritePositionに不正なハンドルが指定されました。ハンドル1は無効です。 line : 16
setSpritePositionに不正なハンドルが指定されました。ハンドル1は無効です。 line : 17

というエラーが発生します。

おそらくline()のことなのだと思いますが、どこを直せばいいかわかりません…
Orichara01 2 700x700  mini ラジアン(投稿日:2012/09/18 19:37, 履歴)
def hiscore()

の部分のendがないような気がします。
002 1  mini ugonight(投稿日:2012/09/19 17:14, 履歴)
うおおおおおおおおお

ありがとうございます><

ずっとrankh()しか見てなくて盲点でした><
申し訳ありませんっ