-PR-
解決済み

複数の、Falseの判定方法について

  • 困ってます
  • 質問No.13339
  • 閲覧数65
  • ありがとう数9
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 80% (34/42)

現在ゲームを作っているんですが、
どうしても、コーディングが、長くなってしまうので、
やりかたを教えて欲しいのですが、
複数の、オブジェクトの判定のやり方を、知りたいのです。
SHAPEを、コントロール配列にして、
0~4までが、全部Falseだったら、
チェックを入れる。
という風にしたいのです。
現在は
If (Shape(0).Visible = False) And (Shape(1).Visible = False) And ~省略~ Then
   hanntei = True 'Boolean形
end if

という風に、全部書いてます。
まだまだ、SHAPEは増やす予定なので、
そうするとどうしても、長くなってしまうので、どうにかしたいのですが、思いつきません。
どなたか、教えてください。
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 65% (242/372)

Shapeコントロールの数をあらかじめ「SHAPE_NUMS」という変数に入れておいて

j = 0
For i = 1 To SHAPE_NUMS
  j = j + Shape(i).Visible
Next i
If j = 0 Then
  hanntei = True
Else
  hanntei = False
End If

なんて方法もありますけど、美しくないですね(苦笑)
これはFalseの値が0という点を利用した方法ですけど、これならShapeコントロールが増えても対応できます。

参考まで
お礼コメント
mutuzi

お礼率 80% (34/42)

早速の書き込みありがとうございます。
変数を三つ使用してますが、
一番まともに動いたので、つかわせて、もらいます。
どうもありがとうございました。
投稿日時 - 0000-00-00 00:00:00
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.2

C言語ならば、
if(Shape[0].Visible & Shape[1].Visible...)
なんてこともできたはずですが、VBだとどうだろう?

まぁ、hequil様のがいい手だと思いますよ。
#汎用性はないけど・・・
#どれかがTRUEだったらなんてことになったら、
#結構改良が面倒そうだから。

後から、どれかがTRUEだったらなんて判定を
追加しそうならば、サブルーチンを一つ作っておくと
いいかもしれませんね。そちらに追加するだけで、
問題なく変更できますから。
ではでは☆
お礼コメント
mutuzi

お礼率 80% (34/42)

書き込みありがとうございます。
C言語ならば、と書いていただいた例は、
結論的には全部書く
ということですよね・・・・?(苦笑)
とりあえず、サブルーチンを~変更できますから
というのは、ありえることなので、考えておこうと想います。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00


  • 回答No.3
レベル13

ベストアンサー率 46% (643/1383)

VBにおいては、FALSEは0と同値であるため、「行儀の悪い」手法を使えば、

For i=0 to 4
  Hit=Hit + Shape(i).visible
Next i
IF Hit=0 THEN
  hantei=True
ELSE
  hantei=False
END IF

であるとか、

IF Shape(0).Visible +Shape(1).Visible +… = 0 Then
  hantei=True
END IF

ってな感じの記述ができます。

もしくは、「行儀のいい」方法でしたら
hantei=True
FOR i=0 to 4
  IF Shape(i).Visible = True then
    hantei=False
    Exit For
  END IF
NEXT i

みたいな書き方が出来るでしょう。
お礼コメント
mutuzi

お礼率 80% (34/42)

書き込みありがとうございます。
FALSEは0と同値は、知りませんでした。(苦笑)
行儀の悪い方法の、二つ目は、あまり俺のと変わりませんね。あと、いい方法でも、上の方と、変わらなく、
誤作動が起きてしまったので、
悪いと言われてますが、一番上の方法を取ろうと想います。
ありがとうございました。
投稿日時 - 0000-00-00 00:00:00
  • 回答No.4
レベル9

ベストアンサー率 28% (10/35)

こんな感じでコードを書いたらShapeが増えても
コードを変更しなくてもいいし、
コードもすっきりします。

Dim shp As Shape

hanntei = True
For Each shp In Shape
If shp.Visible Then
hanntei = False
Exit For
End If
Next shp
お礼コメント
mutuzi

お礼率 80% (34/42)

書き込みありがとうございます。
短くていいのですが、
for eachステートメントを知らなかったため、
解読に苦労しました。(苦笑)
最初に書かなかった俺も悪いのですが、
タイマーを二つで制御してますので、
始めに、TRUEにしてしまうと、誤作動が・・・
でも、for eachステートメントは、他ので使えるので
使わせてもらいます。
どうもありがとうございました。
投稿日時 - 0000-00-00 00:00:00
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


専門家があなたの悩みに回答!

-PR-

ピックアップ

-PR-
ページ先頭へ