HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2009
0801
kurouz一度押したボタンを消すには?3解決


kurouz

リンク

2009/8/1(Sat) 12:35:46|NO.26659

HSPを使って、下記のプログラムを作ろうとしていますが、
一度押したボタンを消す方法がわかりません。

詳しい方がいましたら、是非教えて下さい。

■プログラム内容
対象とするAからCは、2秒ごとに×状態になる。
ボタンを押すと、○状態に回復できる。
一度ボタンを押したら、ボタンを消す。

■問題
ボタンを押したら、そのボタンを消すために、
clrobjを使ったのですが、一向に消えません。

「回復」というボタンを押したら、
そのボタンを消す方法を教えて下さい。

clrobj以外の方法があれば、それでも問題ありません。
宜しくお願いします。

----------------------------------------------------------
title "hogehoge"
a = 0
b = 0
c = 0

*main
cls 0

time_down1 = 2
now_down1 = gettime(6)

*main2
redraw 0

time_down = gettime(6) - now_down1 : if time_down < 0 : time_down += 60
timerimit_down = time_down1 - time_down

color 244,244,244 : boxf
font "MS ゴシック",16,1
color
pos 420,20 : mes "残り時間 "+timerimit_down+" 秒"

font "MS ゴシック",15,1
pos 20,60

//■■該当箇所■■ statで、ボタンのIDを作る

if a = 1{
mes "A×"
button goto "回復",*safe1
A_ID = stat
}else{
mes "A○"
}

pos 120,60
if b = 1{
mes "B×"
button goto "回復",*safe2
B_ID = stat
}else{
mes "B○"
}

pos 220,60
if c = 1{
mes "C×"
button goto "回復",*safe3
C_ID = stat
}else{
mes "C○"
}

redraw

if timerimit_down<=0 {
m = rnd(3)
if m=0 : a = 1
if m=1 : b = 1
if m=2 : c = 1
goto *down
}

wait 1
goto *main2

*down
time_down1 = 3
now_down1 = gettime(6)
goto *main2

//■■該当箇所■■ ボタンを押したら、ボタンを消すようにしたいが、できない。
*safe1
clrobj A_ID,A_ID
a=0
goto *main2

*safe2
clrobj B_ID,B_ID
b=0
goto *main2

*safe3
clrobj C_ID,C_ID
c=0
goto *main2

----------------------------------------------------------



この記事に返信する


通りすがりC

リンク

2009/8/1(Sat) 13:50:05|NO.26662

落ち着いてソースを見てみましょう。
メインループの中でボタンを置いてますよ。



じった

リンク

2009/8/1(Sat) 15:08:25|NO.26665

通りすがりCさんの言うとおり、メインループ内でボタン作成をしているせいですね。

これだと、例えば a=1になった後、
毎ループ毎ループ ものすごい数のボタンが作成されてしまう上、
ボタンのIDは、一番最後に作成されたものしか記憶されていないため、
最後の1個しか消せていないんじゃないかと思います。

ボタンを作成するタイミングは・・・

if timerimit_down<=0 { m = rnd(3) if m=0 : a = 1 if m=1 : b = 1 if m=2 : c = 1 goto *down
・・・の所で良いのではないでしょうか?



kurouz

リンク

2009/8/1(Sat) 18:25:25|NO.26667

回答者の皆様

アドバイスありがとうございます!
下記の様な形で、無事、修正できました。

もう少し省略して書ける部分などは、
今後修正していきますね。


ずっと詰まっていた部分でしたので、
本当に助かりました!!

本当に、本当に、ありがとうございます。


-----------------------------
title "hogehoge"
a = 0
b = 0
c = 0

*main
cls 0

time_down1 = 2
now_down1 = gettime(6)

*main2
redraw 0

time_down = gettime(6) - now_down1 : if time_down < 0 : time_down += 60
timerimit_down = time_down1 - time_down

color 244,244,244 : boxf
font "MS ゴシック",16,1
color
pos 420,20 : mes "残り時間 "+timerimit_down+" 秒"

font "MS ゴシック",15,1
pos 20,60

//■■該当箇所■■

if a = 1{
mes "A×"
}else{
mes "A○"
}

pos 120,60
if b = 1{
mes "B×"
}else{
mes "B○"
}

pos 220,60
if c = 1{
mes "C×"
}else{
mes "C○"
}

redraw

if timerimit_down<=0 {
m = rnd(3)
if m=0 : a = 1
if m=1 : b = 1
if m=2 : c = 1
goto *down
}

//■■該当箇所■■
pos 20,80
if a = 1{
button goto "回復",*safe1
A_ID = stat
}

pos 120,80
if b = 1{
button goto "回復",*safe2
B_ID = stat
}

pos 220,80
if c = 1{
button goto "回復",*safe3
C_ID = stat
}

wait 1
goto *main2

*down
time_down1 = 3
now_down1 = gettime(6)
goto *main2

//■■該当箇所■■
*safe1
clrobj A_ID
a=0
goto *main3

*safe2
clrobj B_ID
b=0
goto *main3

*safe3
clrobj C_ID
c=0
goto *main3

//■■該当箇所■■
*main3
cls 0
goto *main2

-----------------------------



ONION software Copyright 1997-2021(c) All rights reserved.