基本変数の配列(質問掲示板

投稿: 128 mini fragile 投稿:2012/05/06 14:32:06(最新:2012/05/07 00:13:07)
setVariable("block", createArray())

getVariable("block")[0] = createArray()
getVariable("block")[1] = createArray()
getVariable("block")[2] = createArray()
getVariable("block")[3] = createArray()

def block(n, x, y, w, h)
speak("sss")                      #表示されない
getVariable("block")[0][n] = x
getVariable("block")[1][n] = y
getVariable("block")[2][n] = w
getVariable("block")[3][n] = h
end

block(0,1,2,3,4)
speak(getVariable("block")[2][0]) #null

getVariable("block")[2][0] = 3
speak(getVariable("block")[2][0]) #3

#----------test----------#

def ko(p,k,o)
speak("ppp")                      #表示される
setVariable(p, createArray())
getVariable(p)[k] = o
end

ko("atami", 0, 4)
speak(getVariable("atami")[0])    #4


ここを参考に
ブロック(床)の座標を一括して入力する関数を作っているのですが,
実際に使用してみるとnullが返ってきてしまいます。
errorが出ないことから値の入れ方が間違っていると思うのですが
どこが間違っているのでしょうか?

コメントする

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

コメント一覧

128 mini fragile(投稿日:2012/05/06 20:05, 履歴)
とりあえず手元に紙があったのでpaperに変換して
setVariable("TEST", createText(0, 0, 800, 60)) #####TEST

setVariable("paper", createArray())

getVariable("paper")[0] = createArray()
getVariable("paper")[1] = createArray()
getVariable("paper")[2] = createArray()
getVariable("paper")[3] = createArray()

def paper(n, x, y, w, h)
getVariable("paper")[0][n] = x
getVariable("paper")[1][n] = y
getVariable("paper")[2][n] = w
getVariable("paper")[3][n] = h
end

def setpaper(n, x, y, w, h)
 paper(n, x, y, w, h)
 getVariable("paper")[n] = createSprite(100803)
 setSpriteRect(getVariable("paper")[n], x, y, w, h, x, y, w, h)
end


setpaper(0, 0, 555, 800, 45)

setCanvasVisible(true) ; drawCanvas()

###TEST###
setText(getVariable("TEST"),
       getArrayLength(getVariable("paper")[0]), #A
" , ", getArrayLength(getVariable("paper")[1]), #B
" , ", getArrayLength(getVariable("paper")[2]), #C
" , ", getArrayLength(getVariable("paper")[3]), #D
" , ", getVariable("paper")[0][0],              #E
" , ", getVariable("paper")[1][0],              #F
" , ", getVariable("paper")[2][0],              #G
" , ", getVariable("paper")[3][0])              #H

speak(" ")#一時停止

<<RESULT
A = null  B =   1  C =   1  D =  1  
E = null  F = 555  G = 800  H = 45
error
1st argument is not array. line : 30 #A
1st argument is not array. line : 34 #E
RESULT

にしたところ<<RESULTのように[0][0]がnullになりました。
配列が不正なのでスペルミスを疑い,検索してみましたがミスはないようです。
どこが間違っているでしょうか?
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/05/06 20:58, 履歴)
順序を見てみると、

setpaper関数呼び出し
paper関数呼び出し
("paper")[0][0] → 0を代入
setpaper関数に戻る
("paper")[0] → createSpriteの戻り値を代入
RESULTの順ですね

このため
("paper")[0]には子配列がないのでエラーとなり
NULLが返されています
128 mini fragile(投稿日:2012/05/06 21:34, 履歴)
2つ目のdefで上書きされていたのですね。
回答ありがとうございます。
Nyan mini rurun9(投稿日:2012/05/07 00:13, 履歴)
スプライト、テキストエリア、画像表示には自動で「表示番号」が割り当てられますが、これを格納しておく専用の変数配列を必ず用意する方が良いと思います

また関係無いかもしれませんが、setSpriteRect()において素画像からの切取位置x,yと座標セットxx,yyが同じという事は考えにくいので、その辺には注意が必要です
Zararu128x128 mini dycoon(投稿日:2012/05/06 15:26, 履歴)
Rmakeのご利用ありがとうございます。

blockはスクリプトエンジンの内部で
使用されている隠れた関数で、それと衝突してしまったため
正常に動作していないものと思われます。
とりあえずの対処としては
関数のblockを別の名前にすることで
動作するかと思います。

隠れて使われているものには以下のものがあります。
block, add, sub, mul, div, quate, substitution,
call, eq, neq,
lt, le, gt, ge, cond, and, or, not, minus, mod

関数の宣言に使われた場合などは
エラーなど出すべきかと思いますので
改善は考えたいかと思います。

よろしくお願いします。
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/05/06 15:57, 履歴)
この一覧は重要ですね。
...〆(..*