[解決済] 【質問】isMouseUp() について(質問掲示板

投稿:   1 mini 闇さん 投稿:2017/04/01 16:49:01(最新:2017/04/01 18:49:01)
ノベルエディタでマウス画像を押すと画像を消し、放すと再表示というものを作っているのですが
入力待ちループ処理
if isMouseDown()
処理
end
だと正常に押されたときに動くのですが
マウスを離しても
isMouseUp()
の中身が処理されず 試しにマウスを離した時の処理を消して
isMouseUp()を isKeyDown("SPACE")に変えてみたところ 正常に動きました
マウスを離すと何か処理を行うにはどうすればいいでしょうか?

#キャンバス作成処理とか略
mainloop = true
while mainloop
    #キー入力の判定
    while hasInput()
        takeInput()
        if isMouseDown()
          #画像を消す処理
          #ここは正常に動く
        elsif isMouseUp()
          #画像を再表示する処理
          #ここの処理が動かない
          #スペースキーが押されたらとかにすると動く
        end
        startInput()
    end
#画像の更新処理  略  
    waitTime(30)
end


参考にしたサイトは 関数リファレンスと
簸川さんの
https://rmake.jp/blog/aoihikawa/820
です

コメントする

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

コメント一覧

  1 mini 闇さん(投稿日:2017/04/01 18:49, 履歴)
ツイッターで池ちゃんさんに教えてもらい解決しました
結論から言えば
startInput() とendInput() をループ外に出したらOkでした
getMousePosition() は endInput()の後じゃないとダメだと勘違いしてました
  1 mini 闇さん(投稿日:2017/04/01 17:58, 履歴)
省略した部分に問題がある可能性があるので
省略なしで最初から最後まで載せます
#メニュー項目等の表示OFF
setMenuItemVisible(getMenuBackLog(), false)
setMenuItemVisible(getMenuSave(), false)
setMenuItemVisible(getMenuLoad(), false)
setHelpVisible(false)

#キャンバスの初期化
setCanvasVisible(false)
deleteAllSprite()
drawCanvas()

#背景画像の設定
img_bg_no = 319404
img_bg = createSprite(img_bg_no)

get_x = 0  ;get_y = 0  ;get_w = 800  ;get_h = 600
set_x = 0  ;set_y = 0  ;set_w = 800  ;set_h = 600
set_z = 1
pos_x = 0  ;pos_y = 0

setSpriteRect(img_bg, get_x, get_y, get_w, get_h, set_x, set_y, set_w, set_h)
setSpriteZOrder(img_bg, set_z)
setSpritePosition(img_bg, pos_x, pos_y)

#キャラクター画像の設定
img_char_no = 319403
img_char = createSprite(img_char_no)

get_x = 0      ;get_y = 0       ;get_w = 64*3 ;get_h = 64*3
set_x = 0      ;set_y = 0       ;set_w = 64*3 ;set_h = 64*3
set_z = 7
pos_x = 64*5 ;pos_y = 64*3

setSpriteRect(img_char, get_x, get_y, get_w, get_h, set_x, set_y, set_w, set_h)
setSpriteZOrder(img_char, set_z)
setSpritePosition(img_char, pos_x, pos_y)

#ゴミ箱画像の設定
img_gomi_no = 319403
img_gomi = createSprite(img_gomi_no)

get_x = 0 ;get_y = 64*3 ;get_w = 64*3 ;get_h = 64*3
set_x = 0 ;set_y = 0       ;set_w = 64*3 ;set_h = 64*3
set_z = 6
pos_x = 64*0.5 ;pos_y = 64*6

setSpriteRect(img_gomi, get_x, get_y, get_w, get_h, set_x, set_y, set_w, set_h)
setSpriteZOrder(img_gomi, set_z)
setSpritePosition(img_gomi, pos_x, pos_y)

#画面の更新
drawCanvas()
setCanvasVisible(true)


#スコアと時間表示
min = 0
setTextFontColor(255,15,15)
time = createText(0, 0, 64*4, 64)
setText(time, "時間:"+min)

setTextFontColor(255,111,15)
sca = createText(0, 32, 64*4, 64)
sca_mkn = 0
setText(sca, "みかん:" + sca_mkn)

setTextFontColor(255,255,255)

#ゲームモードの選択


startInput()     #入力受付の開始

mkn = true
#メインループの開始

mainloop = true
while mainloop
    #キー入力の判定
    while hasInput()
        takeInput()
        if isMouseDown()
          pos = getMousePosition()   
          endInput()
          #----- キー入力の判定処理を入れる場所 -----
          if pos[0] >= 64*5 && pos [0] <= 64*5+64*3 && pos[1] >= 64*3 && pos[1] <= 64*3+64*3
          #キャラクタークリック時
            deleteSprite(img_char)
            if mkn
              sca_mkn = sca_mkn + 1

            else
              sca_mkn = floor((sca_mkn+1)/2)

              img_char_no = 319403
              img_char = createSprite(img_char_no)

              get_x = 64*3 ;get_y = 0       ;get_w = 64*3 ;get_h = 64*3
              set_x = 0      ;set_y = 0       ;set_w = 64*3 ;set_h = 64*3
              set_z = 7
              pos_x = 64*5 ;pos_y = 64*3

              setSpriteRect(img_char, get_x, get_y, get_w, get_h, set_x, set_y, set_w, set_h)
              setSpriteZOrder(img_char, set_z)
              setSpritePosition(img_char, pos_x, pos_y)
              drawCanvas()
            end
          
          elsif pos[0] >= 64*0.5 && pos[0] <= 64*0.5+64*2.5 && pos[1] >= 64*6 
          #ゴミ箱クリック時
            deleteSprite(img_char)
            if mkn
            else
            end
          end
        elsif isMouseUp()
          endInput()
          #マウスが離されたとき
          deleteSprite(img_char)
          if rand(10) == 0
            img_char_no = 319403
            img_char = createSprite(img_char_no)

            get_x = 64*3 ;get_y = 64*3 ;get_w = 64*3 ;get_h = 64*3
            set_x = 0      ;set_y = 0       ;set_w = 64*3 ;set_h = 64*3
            set_z = 7
            pos_x = 64*5 ;pos_y = 64*3

            setSpriteRect(img_char, get_x, get_y, get_w, get_h, set_x, set_y, set_w, set_h)
            setSpriteZOrder(img_char, set_z)
            setSpritePosition(img_char, pos_x, pos_y)
            drawCanvas()
            mkn = false
          else
             img_char_no = 319403
             img_char = createSprite(img_char_no)

             get_x = 0      ;get_y = 0       ;get_w = 64*3 ;get_h = 64*3
             set_x = 0      ;set_y = 0       ;set_w = 64*3 ;set_h = 64*3
             set_z = 7
             pos_x = 64*5 ;pos_y = 64*3

             setSpriteRect(img_char, get_x, get_y, get_w, get_h, set_x, set_y, set_w, set_h)
             setSpriteZOrder(img_char, set_z)
             setSpritePosition(img_char, pos_x, pos_y)
             drawCanvas()
             mkn = true
           end
        end
        startInput()
    end
   
    #時間とスコアの処理 まだ途中
    deleteText(sca)
    deleteText(time)
    setTextFontColor(255,111,15)
    sca = createText(0, 32, 64*4, 64)
    setText(sca, "みかん:" + sca_mkn) 
    setTextFontColor(255,15,15)
    time = createText(0, 0, 64*4, 64)
    setText(time, "時間:" + min)
    setTextFontColor(255,255,255)
    
    #----- 画面の更新 -----
    drawCanvas()
    waitTime(30)
end
  1 mini 闇さん(投稿日:2017/04/01 18:17, 履歴)
なんだろう? 内部処理がくっそ重いから処理してる間にマウスが離されてしまうとかだろうか?
            mini mosmoss(投稿日:2017/04/01 18:39, 履歴)
スプライト生成の負荷が重いので、そこにコメントをつけてもし回るようなら、
スプライトをループの外で画面外に作っておき
座標移動で表示させる…
コメントつけても回らないなら、ちょっとわからない…
と思いました。
       256 mini 池ちゃん(翡翠ヶ池)(投稿日:2017/04/01 17:15, 履歴)
startInput()
text = createText(200, 200, 700, 300)
a = 0
U=false
t = "マウスを押し続けてください"
#キャンバス作成処理とか略
mainloop = true
while mainloop
setText(text, a,"\n",t)
    #キー入力の判定
    while hasInput()
        takeInput()
        if isMouseDown()
          t = "キーを離すと、止まります。"
          U = true
          #画像を消す処理
          #ここは正常に動く
        elsif isMouseUp()
          t = "上キーを押し続けてください"
          a=0
          U = false
          #画像を再表示する処理
          #ここの処理が動かない
          #スペースキーが押されたらとかにすると動く
        end
 
    end
#画像の更新処理  略  
 if U  #押し続けている時の動作
  a= a + 1
 end
    waitTime(30)
end
endInput()

とりあえずこれでisMouseUp()の部分が動くことを確認しました。
  1 mini 闇さん(投稿日:2017/04/01 17:55, 履歴)
うーん 省略してる処理を全て含めると ダメですね
マウスを離しても無限と数字が増え続けます