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


HSPTV!掲示板


未解決 解決 停止 削除要請

2017
1112
Eka特定の画像をチェックし、該当すればキー入力をしたい7解決


Eka

リンク

2017/11/12(Sun) 00:38:55|NO.81820

本日から使い始めて色々サンプルを見たりしているのですが、
全くわからないのでヒントだけでもお願いします。

☆やりたいこと☆
ゲーム画面の特定座標にあるHPバーが減った時に特定のショートカット(例えばテンキー1)を
連打してHPバーがある程度回復したら連打を停止するようなものを作りたいのです。
(座標を指定するのは似たようなバーが複数あるため)
そしてその機能のONとOFFを例えばF1キーを押したらON、
もう一度F1キーを押す(またはSHIFT+F1等別のボタン)を押したらOFFにできれば最高です。
視覚的にON/OFF状態が確認できたらもっと最高です。
でも最低限HPバーが減ったら1キーを連打、回復したら停止だけでも教えて頂ければ十分です。

☆試したこと☆
できるだけ調べてから質問しようとしたのですが、
そもそもどう調べれば良いか分からずヘルプやサンプルとにらめっこし、
結果必要な画像を読み込まないと駄目っぽい事と、オン・オフはF1が入力されるまで
ループで待機させるのかなぁとぼんやりしたところまでしか分かりませんでした。

↓これで画像読み込み?
buffer 1
picload "folder\\pic\\HPbar.bmp"
screen 0

↓ループ?
repeat
getkey F1,112
if F1=1
break
wait 1
loop

イメージとしてはHPバーが減った状態の画像を用意し、それと同じ状態になったHPバーを
見つけた時に1キーを連打させて、バーが回復する事で用意した画像と異なれば止まる、
様な感じで作りたいと考えています。

長文になってしまいましたが、似たことが出来そうなサンプルかまたはアドバイスなどを
頂ければ幸いです。よろしくお願い致します。



この記事に返信する


ZAP

リンク

2017/11/12(Sun) 00:54:07|NO.81821

「ゲーム画面の特定座標にあるHPバー」というのは
自分で作ったプログラム内のHPバーのことでしょうか?

それとも、第三者が作っている別のプログラムの画像を見て操作させたいってことでしょうか?

後者の場合は結構敷居が高いかと。



Eka

リンク

2017/11/12(Sun) 00:59:25|NO.81822

後者になります、難しいのですね…。
画面上に写ってる画像を認識させることが出来るかなぁと素人考えでいました、お恥ずかしい。



ソラ

リンク

2017/11/12(Sun) 03:02:25|NO.81823

画面のキャプチャはBitBltで出来ます。
http://chokuto.ifdef.jp/advanced/capturewindow.html

画像認識はCVマッチングやpgetなど。
HPバーの検出ならpgetがいいと思います。

キー入力はこちらのsetkeyがお手軽です。
http://www.placeark.com/program_hsp_sample.html

はっきり言って結構大変ですね。



kanamaru

リンク

2017/11/12(Sun) 10:52:26|NO.81826

多分HPバーは長方形だし、
CVマッチングしなくとも、pgetで出来そうですけど。
バーの左上x+バーの長さ*基準のHP/HPバーの最大
とかで一番右を計算して、pgetで色を調べて、
HPが基準に到達してるか判断出来そうな気がします。
ちなみに、計算式は適当なので、テスト実行しながら、
微調整が必要だと思います。



Seal

リンク

2017/11/12(Sun) 20:08:51|NO.81832

参考にしてくださると幸いです^^
説明
[F1]キーで回復モード[有効][無効]と切り替えで
HPが300〜500の間に回復モードが[有効]なら[1]キーで回復します

// *** 変数宣言 *** \\ heel_sw = 0 ; 回復モード hp = 610 ; 体力 heel = 10 ; 回復数 damage = 20 ; ダメージ数 heels_swhp = 300 ; 指定したHP以上で回復ができる heele_swhp = 500 ; 指定したHP以下まで回復できる // *** メインループ *** \\ objsize 100, 24 pos 10, 446 button gosub "ダメージを受ける", *player_damage repeat redraw 0 gosub *draw_back gosub *draw_hpbar gosub *draw_print redraw 1 gosub *player_key gosub *player_gameover await 16 loop // *** ダメージを受ける *** \\ *player_damage hp = hp - damage return // *** 背景を描画 *** \\ *draw_back color 0, 64, 0 boxf return // *** HPバーを描画 *** \\ *draw_hpbar color 0, 0, 0 boxf 10, 10, 630, 70 if hp < 0 : hp = 0 : gameover = 1 if hp > 610 : hp = 610 color 0, 255, 0 boxf 15, 15, (hp+14), 65 return // *** 文字を描画 *** \\ *draw_print color 255, 255, 255 pos 10, 100 mes "回復モード:" + heel_sw mes "体力:" + hp return // *** プレイヤーのキー操作 *** \\ *player_key getkey hsw, 112 ; [F1]で切り替え if ( hsw = 1 & _hsw = 0 ) { heel_sw ^= 1 } _hsw = hsw if heel_sw = 1 { getkey hpk, '1' ; [1]キーで回復 if ( hpk = 1 & _hpk = 0 ) & ( hp >= heels_swhp & hp < heele_swhp ) { hp = hp + heel } _hpk = hpk } return // *** ゲームオーバー判定 *** \\ *player_gameover if gameover != 1 : return dialog "ゲームオーバー!!", 1, "あなたは負けました" hp = 610 gameover = 0 return



Eka

リンク

2017/11/13(Mon) 00:11:29|NO.81834

ソラさんkanamaruさんありがとうございます。ちんぷんかんぷんですが調べて見ます!
sealさん、やりたい事とは違いますがサンプル有難うございます。
コレはコレで勉強になりそうなのでじっくり意味を調べてみます!



Eka

リンク

2017/11/18(Sat) 09:26:18|NO.81865

皆さん有難うございました。
教えていただいたことをヒントに勉強してみようと思います。

また何かあればお力を貸して頂ければ嬉しいです。



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