スキップしてメイン コンテンツに移動

HSPでマップをスクロールさせてみた

先日は、アニメーションするスプライトを作ってマップをうろちょろさせました。
今回は、そのマップをスクロールする機能を実装しました。


テスト用のアプリケーションでは、スプライトではなく円を塗りつぶしたものを移動させています。

そんなに大きくないマップですが、スクロールすると広く感じたり探検気分がでてきた気がします。
スクロールってわくわくするね₍₍ (ง `・ω・´ )ว ⁾⁾

スクロールの処理の概要


赤線の枠は、フレームと呼んでいます。
フレームはスクロール機能の設定値で、この枠からはみ出す場合にスクロールします。
追跡対象が枠の中で移動している間はスクロールはしません。
ただし、スクロールの範囲はマップ画像の範囲内です。

描画処理は前回書いたとおり、背景、キャラ、前景の順番で描いています。

描画のあとで、キー入力に応じて、キャラの移動先を決めます。
障害物があれば移動はしません。

障害物の判定


障害物の判定は、次のような当たり判定用の画像の色情報で決めています。
移動先の座標の色を取得して、色が黒でなければ移動します。
HSP には pget という色を取得する関数がありますが、
それより高速に行う方法が紹介されていたので、そちらを試してみました。
参照:buffer上の特定の1色の座標(1点)の高速検索方法は? - HSPTV!掲示板

mref bufVram, 66
で、変数に操作中のウィンドウの画像が割り当てられます。
あとは、 peek を使って bufVram の色情報へアクセスします。


idxVram = ((heightBuffer - y - 1) * widthBuffer + x) * 3
_b = peek(bufVram, idxVram + 0)
_g = peek(bufVram, idxVram + 1)
_r = peek(bufVram, idxVram + 2)

widthBuffer, heightBuffer はウィンドウのサイズです。
VRAM はボトムアップの 24bit ビットマップ形式になっています。
 参照:VRAMデータについて - HSPTV!掲示板

当たり判定用の画像は、だいぶ雑なので壁に少しのめりこんでしまいました。
このあたりは、今後微調整していこうと思います。

スプライトの描画順の改善


そういえば、スプライトの機能のテストをしていて、あれからひとつ改良しました。

キャラが複数重なる場合、手前にいるキャラをあとで描画する必要があります。
そのために、キャラの Y 軸の座標の値でキャラをソートする処理を実装しました。
これについては、 HSP の wiki で提供されているヒープソートの処理を参考にしました。
 参照:Module/ヒープソート - HSP開発wiki

Y軸の座標の値が小さいものから昇順で描画することで、違和感なくキャラを重ねられるようになりました。

予定


次回は、スプライトの機能と今回のスクロールの機能をあわせて、複数のキャラが移動しているマップをスクロールしながら移動したいと思います。
キャラももうちょっと種類を増やしたり、かわいくしたりしたいです。

コメント

このブログの人気の投稿

GrimDawn クロンリーの幹部という名もなき賞金首

 賞金首を倒すのは、短時間で何か達成するにはちょうどいいミッションだ。 今までのバウンティのクエストには、ターゲットのいる場所などが書かれていたのだが、今回はクロンリーの幹部3人を倒せというもの。 今までは、賞金首に名前があったが、幹部3人という表現は何なのだろうと思った。 3人もいるから文章を短縮するために名前を端折ったのか。 それに場所も書かれていないので、ウィキを見たのだけど、よくわからなかったので、とりあえずクロンリーの隠れ家にリフトで移動した。 クロンリーの隠れ家の入り口あたり 隠れ家周辺の可能性もあるけど、クリスタルを埋め込まれたということは、かなりクロンリーの近くにいる気がする。 クロンリーの隠れ家には数体、 HP バーの左右にドクロマークがついているヒーロークラス のやつらがいるので、そいつらのことかもしれないと思った。 一番上にマーティンとか名前がついてるから幹部かなと期待したけど違った そして、マーティン(幹部かなと思ってた)と戦っていたら、いきなり、幹部を倒したというメッセージ。 マーティンは幹部じゃなかったし、いつ幹部をやったかは不明 どうやら、よく見るとたまに MOB っぽい敵の中に幹部と書かれている敵がいるのでそいつらを3体やればよいということらしい。 道中でいつの間にか幹部を3体倒してミッションもクリアしたので、ついでにクロンリーを倒してきた(まだやられそうになりながらだけど、たまに逃げたりしながら時間を数分かければ勝てる)。 クロンリーの隠れ家のマーティンのように名前もなく、「幹部」という肩書だけのMOB。 幹部はもちろん それなりに偉いんだろうけど 、名前もなく、いつの間にかやられるところに、 むなしさを感じた賞金首たち だった。 名前は大事だな。あと雑魚と一緒にしなない程度のタフさがあればよかったのかなと思う。 そろそろストーリーをすすめたいが、いろいろあって、短時間しかできない。 あと、いい装備がでてこなくなってきたのでモチベーションが下がり気味なこともある。 飽きる前に、 Act4 まではすすめたい。 つづく

QTableView で表を表示してみる

タイトルは駄洒落を狙っているわけではありません。 こんばんわ SakuraCrowd です。 今回は今作っているソフトの経過報告です。 最近のブログのパターンは、 「XXX作ったよ。これがスクリーンショットね。あとこんなこと思ったよ。」 という流れですが、 今日はできていないソフトの部分的な話なので、 いつもよりもプログラムちっくな話になると思います。(´Ծ_Ծ´)メガネノトキハマジメブッテル QTableView は GUIライブラリ Qt のクラスです。 それを Python で使うための PySide というライブラリを使っています。 某表計算ソフト っぽい表の GUI です。 このデータの日付が 09/01 なのでおそらくその日に   QTableView 使うぞ!(`・ω・´) とサンプルデータを作ったのでしょう。 Qt Designer という GUI エディタを使うとポトペタでウィンドウを設計できます。 選択できる GUI の中に QTableView と QTableWidget があります。 どちらも上のような表の GUI です。 QTableWidget は 簡単 に値をいれたりできます。 Qt Designer 上で直接編集 することができるので、 サンプルの表を簡単に作ることができます。 それに対して、 QTableView は Qt Designer 上では値を編集できません。たぶん。 QTableView の強みは MVC の構造 を使えることです。 名前のとおり QTableView は View です。 これにデータを管理している Model オブジェクトを設定して使います。 Model クラスを作る手間がかかりますが、 GUI の細かな操作をしなくても Model に応じた表を表示してくれます。 Model は QAbstractTableModel を 継承 して作ります。 コンストラクタで基底クラスの処理を呼び出し、いくつかの純粋仮想関数をオーバーライドします。 def __init__ ( self , parent= None , *args):...

GrimDawn Act1ボスの実験室の毒対策の装備品ゲット

Act1 のボスがいる地下の巨大な実験室。その広さもすごいが、遠距離攻撃で袋叩きになる。 ボスの緑色の攻撃もやたら強い。鬼ごっこをしながらたまに攻撃をするので時間もかかる。 Act1 のボス。ヴォードン クリーグ。第二形態がやばい。 道中のMOBたちは、炎や雷を投げてくる奴らもうざいが、一番やっかいなのは毒投げしてくる奴だった。 気を抜くと一瞬で体力が半分以上減ってる。 しかも、毒の沼地みたいなところもあって、そこは本当にやばかった。 これは私の装備に問題があったようだ。 ステータスを見ると毒酸耐性が驚きの 12 % しかない。 この 12 %についても、最近、NPCにモンスターのドロップ品を渡して作ってもらった「スリスプライマルリング」のおかげだ。 これを装備した理由は、せっかく作ってもらったし、名前の左側にへんなアイコンがあって特別感があったからだ。そんな判断してたらハクスラやってけないだろうと自分でも思うが、細かすぎて良し悪しを決めるのが難しいのだ。 追記:変なアイコンの正体はこれかも。MIっていう特定モンスターだけが落とす装備。だから何なのだろうとは思う。 耐性は 80 % まであげられると聞いているけど、あまり毒酸耐性を意識せずに装備品を選んでいたらこのざまである。 そこで、毒酸耐性を高める対策を行うことにした。 wikiの「 生存性向上の為のアドバイス - Grim Dawn 日本語wiki Wiki* 」の Act1 を開くと良さそうな装備があった。 プライモーディアン, 見捨てられし者 (霧の土手 エリアにあるダンジョン 大洞穴 のボス) アミュレット: ピュートリッド ネックレス  - 毒酸耐性 + 毒強化 これを手に入れて毒酸耐性を強化する。初めてドロップを狙っていく、ハクスラめいたことをやっている気がする。 毒酸耐性があがる装備を求めて 毒酸耐性が上がるアミュレットは、「見捨てられし者」というヒーロー(中ボスみたいな)を倒すとドロップすることがあるらしい。 wiki の案内通りに霧の土手エリアにリフトで移動。 リフトは「冠水通路」というダンジョンの出入り口付近にあるので、そこから外に出る。 大洞穴を探してうろちょろしていたら、霧の土手リフトの少し右上のバーウィッチで、鍵のかかった扉をみつけた。でも開けられない。大洞穴のダンジョンの入り...