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


HSPTV!掲示板


未解決 解決 停止 削除要請

2016
0225
nen擬似3D表現の画像描画順について7未解決


nen

リンク

2016/2/25(Thu) 14:25:34|NO.74698

縦、横、奥行きの3軸に動くゲームを製作しているのですが
奥行きの表現で、手前のキャラと奥のキャラの描画順を入れ替える方法について、
zソートとかバブルソートとかd3moduleを使うとか、
いろいろな方法があるようですが、理解できずにつまづいています。

より簡単な方法はないものでしょうか?
できたらcss3の[z-index]ぐらいに簡単な方法がいいです。



この記事に返信する


kanamaru

リンク

2016/2/25(Thu) 17:03:11|NO.74699

mod_sprite.asを使うのはどうでしょうか?



nen

リンク

2016/2/27(Sat) 19:51:12|NO.74719

>>kanamaruさん
返信ありがとうございます。

このサイトまではたどり着きました…
http://www.onionsoft.net/hsp/ref/sample/demo/

が、hsp3dishのサンプルにある『hsplogo.hsp』に
利用されていることがわかったぐらいで
実際の使い方は全く理解できません。

解説みたいなものはどこかにないでしょうか?



(´ω`)

リンク

2016/3/5(Sat) 15:56:17|NO.74786

ご質問の内容が微妙にあいまいかと。
いろいろ状況を想定し、それに対するアドバイスを以下に申し上げます。(´ω`)


その1:キャラ表示はスプライトがいい

hspdxfixを使うのが簡単です。
es_set命令がキャラ定義命令で、その6番目のパラメータがまさしくz-indexに相当します。


その2:キャラ表示は3Dで行う

私は使ったことがありませんが、d3moduleを使うのがいいのでは。
3D描画機能ですので、Zバッファは自動処理してくれますし。


その3:キャラ表示は自前で行う

Zバッファ機能を自前で作るしかないですね。
hspdaの、csvソート機能を使えば配列変数のソートができます。
おすすめは、SQLeleでメモリ内DBを作ってキャラクタデータを管理。
「一定座標内の敵キャラのうち、ザコだけを全て抽出」なんてのも
SQL1発でできるので簡単です。



ZAP

リンク

2016/3/6(Sun) 17:47:01|NO.74798

hspdxfixは2D描画のプラグインだから
3D描画のモジュールとは競合して使えないんじゃないかと思う。
それにDirectXの世代的にも古く、最新のグラボだと逆に不具合が出る
環境もあるらしい?ので注意が必要。



nen

リンク

2016/3/14(Mon) 07:56:28|NO.74915

>(´ω`)さん
丁寧な返信ありがとうございます。

あいまいですみません。
何を申し上げればいいのかもわからないのですが、
キャラクタが手前か奥に移動するときに[pos p1,p2]のp2を動かし、
p2の値が小さいキャラから順に、celloadで読み込みceldivで分割した画像を
celput命令で描画させ、重ね合わせによって奥行きを表現したいのです。
もちろん、他の命令に置き換えてもかまいません…が、それがわかりません。

ご教授いただいたものを全部試してみましたが、hspdxを利用することにします。


おにたまさんの著書『はじめてのプログラミングHSP3.4+3Dish超入門』を
参考にしながら製作しているのですが、どうもこの本とhspdxでは
やり方が全く違っていて、簡単とは思えないです…

本の通りcelloadで読み込み→celdivで分割→[celput p1,p2]で表示→p2を変数にして
アニメーションさせる流れでキャラクタを表示しているのですが、
hspdxではこれをどのように置き換えたらよいのでしょうか?



nen

リンク

2016/3/14(Mon) 07:58:48|NO.74916

>ZAPさん
返信ありがとうございます。
私が作っているのは2D描画で擬似的に3Dを表現するものなので、
競合するものはないから大丈夫だと思います。

DirectXの世代やグラフィックボードとの相性については、とりあえず心に留め置き
問題が出たときにまた対応しようと思います。



暇人

リンク

2016/3/15(Tue) 00:36:35|NO.74923

流れとしてはこんな感じ

#include "hspdx.as" es_ini ; system初期化 es_screen 640,480,32,,1,1 ; スクリーン初期化(Direct3D使用) if stat :end dxbid=0 animf=20 //アニメーションフレーム数 buffer 1 picload dir_exe+"\\hsptv\\hsptv_img.bmp" divx=ginfo_sx/64 divy=ginfo_sy/64 es_buffer dxbid,0,-1,0,1 //テクスチャ使用 //celdivの相当役割 es_size 64,64,100,0 repeat divx*divy es_expat cnt,dxbid,64*(cnt\divx),64*(cnt/divx),animf loop myx=200 myy=100 animid=divx*3 //4段目からアニメーションキャラがあるので repeat divx py=myy+cnt*30 es_set cnt,myx+cnt*20,py,animid,1,-py //Direct3D使用//Y座標を反転して優先度に設定 es_setp cnt,25,0.1*(py-240)+64 //Y座標をカメラからの距離として使用 es_setp cnt,26,0.1*(py-240)+64 //アニメ−ションリンク es_link animid,animid+1 es_link animid+1,animid animid+2 loop animid=divx*3 es_set 0,300,200,animid,1,0 //Direct3D使用 gsel 0 repeat stick ky,$1f if ky&$80 : end if ky&1 {myx-4} if ky&4 {myx+4} if ky&2 {myy-4} if ky&8 {myy+4} es_pos 0,myx,myy es_setpri 0,-myy //Y座標を反転して優先度に設定 es_setp 0,25,0.1*(myy-240)+64 //Y座標をカメラからの距離として中心より上なら小さく下なら大きくなるように es_setp 0,26,0.1*(myy-240)+64 es_cls 0,0,255 ; 青でクリア es_draw ,,,1 ; 優先順位有効でスプライト描画 es_sync 16 await 0 loop



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