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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1207
nyoromo判断式どおりに安定して分岐してくれない!7未解決


nyoromo

リンク

2008/12/7(Sun) 12:13:25|NO.21338

APIのuser32.asを用いて、スクリーン上のある点の色情報を得て、その値によって作業をさせようとしています。
web上のflash上のある点の色情報を得るのですが、値による判断の処理が安定しません。
正しく処理するときもあれば、同じ状況なのにもかかわらずうまく判断してくれないときがあります。
webflash上の色情報は読み取ることは難しいのですか?プログラムのミスがないとしたときに、不安定になる原因があるのでしょうか?
flash上の操作も少しあるので、flash上の処理が終わって表示の変化がなくなってから色情報を読み取るようにはしているのですが。。。



この記事に返信する


sssssssss

リンク

2008/12/7(Sun) 13:43:30|NO.21344

人間の目にはRGB=(0,0,0)もRGB=(0,0,1)も同じ黒に見えるが
コンピュータには異なる色なんだよ。それくらい分かってることだろ。

APIを使用して取得した色はそのとき取得した色で間違いなんだから
動きのある画面の色を取得する場合は
RGB的に変化のない範囲を取得するか
誤差を見込んだプログラムを組むか
どちらかしかないんだよ。それくらい分かってることだろ。

「表示の変化が終わった」というのもプログラムで判断しているからそう断言するんだよね?
まさか自分の主観で判断してんの?
だったらそれはプログラムが間違っているんじゃなくってあなたの画面上の色にたいする
判断が間違っているんじゃないんですか?



nyoromo

リンク

2008/12/7(Sun) 16:09:04|NO.21366

判断のもととなる色情報はほかのプログラムで調べました。マウスの座標とその点の色情報をタイトルバーに表示させるプログラムで地道にr,g,bを記録していきました。
ちなみにflashは常に動いてるわけじゃないです。こちらがクリックで操作をするとかわる程度です。
強い口調であたるほど、つまらない質問という理解でよろしいでしょうか・・・



あり

リンク

2008/12/7(Sun) 16:58:47|NO.21371

nyoromoさん>>
sssssssssさんのレスは、行き過ぎている発言ですので
気にしなくてもいいですよ。

ただ、質問の文章だけでは、どのようにスクリプトが動いているのかが
わからないので、原因を特定するのは難しいと思います。
可能であるならば、該当処理部分を含めた簡潔なスクリプト(数十行程度)を
提示してもらえれば、力になってくれる人がいるかもしれません。



nyoromo

リンク

2008/12/7(Sun) 17:23:27|NO.21372


*続き mouse 135,455 gosub *色ゲット gosub *onecheck while (tnum1 - num1) ! 0 mouse 135,455 gosub *クリック wait 20 gosub *色ゲット gosub *onecheck wait 10 wend mouse 194,467 gosub *色ゲット gosub *twocheck while (tnum2 - num2) ! 0 mouse 194,467 gosub *クリック wait 20 gosub *色ゲット gosub *twocheck wait 10 wend mouse 135,455 gosub *色ゲット gosub *onecheck mouse 194,467 gosub *色ゲット gosub *twocheck ーーーーーーーーーーーーーーーーーーーー if (tnum1 = num1) and (tnum2 = num2) :goto *続き:else:goto *戻る *色ゲット GetDC 0 : dc=stat GetPixel dc, ginfo_mx, ginfo_my : col=stat color col & 255, (col >> 8) & 255, col >> 16 r = ginfo_r: g = ginfo_g: b = ginfo_b ReleaseDC 0, dc return

*onecheck,*twocheckは*色ゲットで返されたr,g,bの値をもとに、表示されているボタンの画像を1〜5まで数字に対応させて、num1,2に返します。tnum1,2には1〜5の数字があらかじめ代入されています。
そのボタンの画像はクリックするたびに循環します。(1-2-3-4-5-1-2...
このプログラムだと、罫線より上の部分を通ってきた場合は罫線より下の部分も問題なく通過するはずなのですが、また無意味にgoto *戻るになるときがあります。
画像は常に変化しているものではないのに、うまくいったり、ループを永遠とくりかえしたりするのはなんででしょう?この場合のループというのはwhileではなく、if-gotoのことです。
よろしくおねがいします。。。。



sssssssss

リンク

2008/12/7(Sun) 18:34:40|NO.21374

ありの言うことはあまり参考にならないです。

>罫線より上の部分を通ってきた場合は罫線より下の部分も問題なく通過するはずなのですが、
>また無意味にgoto *戻るになるときがあります。

マクロする対象のflashがどんなflashなのか分かりませんが、
「通過するはず」という想定は「問題が入る余地がない」ということと解釈してよろしいですか?
もしそうなら残念ながら問題が入る余地は残っています。

No.21372のスクリプトを簡単にすると次のようになります。

/* 想定した画像が表示されるまで画像の切り替えを繰り返す */ while (tnum1 - num1) ! 0 ; クリック(画像を切り替える) wend /* 想定した画像が表示されるまで画像の切り替えを繰り返す */ while (tnum2 - num2) ! 0 ; クリック(画像を切り替える) wend ; mouse 135,455 ; gosub *色ゲット ; gosub *onecheck ; mouse 194,467 ; gosub *色ゲット ; gosub *twocheck ;---- if (tnum1 = num1) and (tnum2 = num2) { ; 画像1と画像2が想定どおりなので続きへいくはずである goto *続き } else { /* 予想に反してここが実行されることがある */ goto *戻る }

ここでコメントアウトした部分に注意してください。
もしコメントアウトしたままであれば、罫線以下のif文はwhileループを抜けたときの
変数num1, num2の値を比較しているので、else文は実行されません。

しかしNo.21372のスクリプトではコメントアウトした部分が実行されます。
つまりwhileループを抜けた段階の変数num1, num2の値が変更される余地が残されています。

座標(194,467)をクリックしたとき座標(194,467)以外の箇所に変化が現れるflashの場合、
No.21372のスクリプトは罫線以下のelse文が実行されることがあります。

あくまでどんなflashなのか分からない上で答えていますのでコメントアウトした部分が原因かどうかは
わかりません。

しかし、ありに比べれば参考になったと思います。
デバッグしてくださいませ。



××

リンク

2008/12/8(Mon) 15:00:14|NO.21407

みんな仲良くしようぜ(^ ^;)



s

リンク

2008/12/8(Mon) 15:18:48|NO.21409

正論を述べていてもマナーというものがあります。

> ありの言うことはあまり参考にならないです。
> しかし、ありに比べれば参考になったと思います。
ここは文的に必要でしたか?
一言一言が他人の気分を害する事があるので、発言には気をつけてください。



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