スクリプト/画面上にボタンを作る関数

最終投稿者:Material 305033 1 mini cfm_ 更新:2016/07/14 22:24:29
2枚の画像と、ボタンの左上・右下座標を入力するだけでボタンが作れます。

この関数を使うには、こちらスクリプト/キー入力を1行で取得する関数の関数を入れる必要があります。
この関数のスクリプトより先に実行されるよう貼り付けてください。

#スクリプトの最初に記述が必要
button_start()

#ボタンを追加する(ボタン番号,通常時画像,押下中画像,画像幅,画像高さ,左上X,左上Y,右下X,右下Y)
# index(ボタン番号)は-1以外の数値です。
# img0,img1に0を入れると、それぞれ画像を表示しません
# 2つの画像は同じサイズで用意してください。
# 左上と右下の座標によって、自動で画像を拡大縮小します。
button_add(index,img0,img1,imgw,imgh,x0,y0,x1,y1,ZOrder)

#ボタンがクリックされたらTrueを返す
button_get(index)

#ボタンを削除する
button_delete(index)

#ボタンをすべて削除する
button_alldelete()

#すべてのボタンの番号が入った配列を取得
button_getarray()


 関数のスクリプト
#スクリプトの最初に記述が必要。
def button_start()
  setCanvasVisible(true)
  setVariable("btn_ctrl",createArray())
  setVariable("btn_img0",createArray())
  setVariable("btn_img1",createArray())
  setVariable("btn_imgnum0",createArray())
  setVariable("btn_imgnum1",createArray())
  setVariable("btn_x0",createArray())
  setVariable("btn_y0",createArray())
  setVariable("btn_x1",createArray())
  setVariable("btn_y1",createArray())
  setVariable("btn_z",createArray())
  setVariable("btn_imgw",createArray())
  setVariable("btn_imgh",createArray())
  setVariable("btn_push",createArray())
end

#ボタンを作成(ボタン番号,通常時画像,押下中画像,画像幅,画像高さ,左上X,左上Y,右下X,右下Y)
#img0,img1に0を入れると、それぞれ画像を表示しません
#2つの座標によって、自動で画像を拡大縮小します。
#2つの画像の幅と高さは同じにしてください。
#indexは-1以外の数値。
def button_add(index,img0,img1,imgw,imgh,x0,y0,x1,y1,ZOrder)
  getVariable("btn_imgw")[index]=imgw
  getVariable("btn_imgh")[index]=imgh
  getVariable("btn_imgnum0")[index]=img0
  getVariable("btn_imgnum1")[index]=img1
  getVariable("btn_x0")[index]=x0
  getVariable("btn_y0")[index]=y0
  getVariable("btn_x1")[index]=x1
  getVariable("btn_y1")[index]=y1
  getVariable("btn_z")[index]=ZOrder
  pushArray(getVariable("btn_ctrl"), index)
  if img0==0
    getVariable("btn_img0")[index]=0
  else
    getVariable("btn_img0")[index]=createSprite(img0)
    setSpriteRect(getVariable("btn_img0")[index],0,0,getVariable("btn_imgw")[index],getVariable("btn_imgh")[index],0,0,getVariable("btn_x1")[index]-getVariable("btn_x0")[index]+1,getVariable("btn_y1")[index]-getVariable("btn_y0")[index]+1)
    setSpritePosition(getVariable("btn_img0")[index],getVariable("btn_x0")[index],getVariable("btn_y0")[index])
    setSpriteZOrder(getVariable("btn_img0")[index],getVariable("btn_z")[index])
    drawCanvas()
  end
  getVariable("btn_img1")[index]=0
end
#ボタンがクリックされたらTrueを返す
def button_get(index)
  b=0
  x=input_getmousex()
  if getVariable("btn_x0")[index]<x&&x<getVariable("btn_x1")[index]
    y=input_getmousey()
    if getVariable("btn_y0")[index]<y&&y<getVariable("btn_y1")[index]
      if input_getmouse("HOLD")
        if !getVariable("btn_push")[index]
          if getVariable("btn_img0")[index]!=0
            deleteSprite(getVariable("btn_img0")[index])
            getVariable("btn_img0")[index]=0
          end
          if getVariable("btn_imgnum1")[index]!=0
            getVariable("btn_img1")[index]=createSprite(getVariable("btn_imgnum1")[index])
            setSpriteRect(getVariable("btn_img1")[index],0,0,getVariable("btn_imgw")[index],getVariable("btn_imgh")[index],0,0,getVariable("btn_x1")[index]-getVariable("btn_x0")[index]+1,getVariable("btn_y1")[index]-getVariable("btn_y0")[index]+1)
            setSpritePosition(getVariable("btn_img1")[index],getVariable("btn_x0")[index],getVariable("btn_y0")[index])
            setSpriteZOrder(getVariable("btn_img1")[index],getVariable("btn_z")[index])
          end
          drawCanvas()
          getVariable("btn_push")[index]=true
        end
      elsif getVariable("btn_push")[index]#離されたとき
        b=2
      end
    elsif getVariable("btn_push")[index]
      b=1
    end
  elsif getVariable("btn_push")[index]
    b=1
  end
  if b==1||b==2
    if getVariable("btn_img1")[index]!=0
      deleteSprite(getVariable("btn_img1")[index])
      getVariable("btn_img1")[index]=0
    end
    if getVariable("btn_imgnum0")[index]!=0
      getVariable("btn_img0")[index]=createSprite(getVariable("btn_imgnum0")[index])
      setSpriteRect(getVariable("btn_img0")[index],0,0,getVariable("btn_imgw")[index],getVariable("btn_imgh")[index],0,0,getVariable("btn_x1")[index]-getVariable("btn_x0")[index]+1,getVariable("btn_y1")[index]-getVariable("btn_y0")[index]+1)
      setSpritePosition(getVariable("btn_img0")[index],getVariable("btn_x0")[index],getVariable("btn_y0")[index])
      setSpriteZOrder(getVariable("btn_img0")[index],getVariable("btn_z")[index])
    end
    drawCanvas()
    getVariable("btn_push")[index]=false
  end
  return b==2
end
#すべてのボタンの番号が入った配列を取得
def button_getarray()
  a=createArray()
  len=getArrayLength(getVariable("btn_ctrl"))
  j=0
  i=0
  while i<len
    if getVariable("btn_ctrl")[i]!=-1
      a[j]=getVariable("btn_ctrl")[i]
      j=j+1
    end
    i=i+1
  end
  return a
end
def button_delete(index)
  i=getArrayLength(getVariable("btn_ctrl"))-1
  while -1<i
    if getVariable("btn_ctrl")[i]==index
      if getVariable("btn_img0")[index]!=0
        deleteSprite(getVariable("btn_img0")[index])
      elsif getVariable("btn_img1")[index]!=0
        deleteSprite(getVariable("btn_img1")[index])
      end
      drawCanvas()
      getVariable("btn_ctrl")[i]=-1
      return true
    end
    i=i-1
  end
  return false
end
def button_alldelete()
  i=getArrayLength(getVariable("btn_ctrl"))-1
  while -1<i
    if getVariable("btn_ctrl")[i]!=-1
      if getVariable("btn_img0")[getVariable("btn_ctrl")[i]]!=0
        deleteSprite(getVariable("btn_img0")[getVariable("btn_ctrl")[i]])
      elsif getVariable("btn_img1")[getVariable("btn_ctrl")[i]]!=0
        deleteSprite(getVariable("btn_img1")[getVariable("btn_ctrl")[i]])
      end
      getVariable("btn_ctrl")[i]=-1
    end
    i=i-1
  end
  drawCanvas()
end




 このゲームのスクリプト
input_start()
button_start()
i=0
while i<7
  x=rand(400)
  y=rand(400)
  button_add(i,300405,300412,32,32,x,y,x+20+rand(20),y+20+rand(20),7)
  i=i+1
end
cnt=0
while true
  i=0
  while i<7
    if button_get(i)
      speak("それは"+toString(i)+"番のボタンだ。")
      if i==cnt
        cnt=cnt+1
        if cnt==7 then goEnding();end
      else
        cnt=0
        speak("順番に押そう。")
      end
    end
    i=i+1
  end
end

コメントする

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

コメント一覧

            mini mosmoss(投稿日:2016/07/14 22:24, 履歴)
使ってみた感じといくつかの応用例を書いてみました
http://blog.rmake.jp/mosmoss/7573
応用例は、「ボタンに回転角度を設定する」「カーソルがボタンの上にある時に画像を変える」
「ボタン情報を利用した当たり判定」の3本です