FC2ブログ

PSP xvi

PSPプログラミングを教えるブログ(本気で頑張る人アクセス大歓迎サイト)

PSP-X.gif

記事の間違いを報告  新アップローダー
記事修正情報 PSPプログラミング資料 自作ゲーム PSP用エミュレータ リンク

公認リンク
公式PSP専科 公式PSVita専科 はじめるPSPSDK PSP EXEC GAME M@STER PSP 猫山のYouTubeチャンネル

TAG
全記事にタグをつけています  http://nekoyama2gillien.blog36.fc2.com/?tag=タグ
PSP PSPプログラミング DXライブラリPortable OSLib ショートプログラム ハローワールド
PSP自作ゲーム PSP自作ソフト エミュレータ ゲームアーカイブス PSP動画
動画 初音ミク ミクミクダンス MMDドラマ ゲーム 魔法少女まどか☆マギカ 侵略!イカ娘
アイドルマスター

このブログについて

このブログでは、非公式のPSPソフト、いわゆる自作ソフト( PSP Homebrew )を作る事を目的とします。

著作権などの こまかい利用規約については、こちらを開いてお読み下さい

このブログについて知りたい方、初めて来訪された方はこちらを開いてお読みください
お問い合わせは 猫山猫宗(nekomune@gmail.com)までどうぞ


当ブログはリンクフリーです。ブログ名は、アルファベットで「PSP xvi」と書いて『ピーエスピー・エクシビ』とお読みください。
相互リンクを希望されるブログ運営者様は、ココで申請して下さい。


このブログで全記事から探し物の方は、ここをクリックして下さい。
http://nekoyama2gillien.blog36.fc2.com/?all

スポンサーサイト 

--/--/--
--. --:--

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[edit]

CM: --
TB: --

page top

はい、解説です

素材は 標準PSPで表示・再生できるフォルダに入れてますでしょうか。
このRPGはまだ開発中なので、素材は EBOOT.PBP と別フォルダが良いと判断してます。

【 今回は、勇者の描画方法についてだけ解説 】
勇者は、上下左右の4方向に3パターンで合計12枚のキャラ絵を使用しています。
配布素材はDXライブラリPortable でも扱いやすい構成になっていましたので、勇者の絵は 背景を透過させただけで殆ど弄っていません。

勇者の絵は、308行目で読み込んでいます。
> LoadDivGraph( GRPH_HERO ,12,3,4,32,48,&HDL_Graph_Hero[0][0]);
↑これです。画像の分割格納読み込みをやっています。
これは、全部で画像を12個に分割し、横3列、縦4行、横幅32ピクセル、縦幅48ピクセルにして、その分割した画像のハンドルを、二次元配列HDL_Graph_Hero に順番に格納させる命令です。

&HDL_Graph_Hero[0][0] は配列の先頭のポインタですよ

注意:画像の分割数は最低でも1です。うっかり0にすると実行時に挙動がおかしくなります。コンパイルエラーにはならないので十分気を付けて下さい。

    

配布されているこの絵ですが、どう扱えば良いか?
縦は「向き」ですね。向きの定義はこれです。32行目からの部分。

#define MUKI_SHITA   0 // 下向き
#define MUKI_HIDARI  1 // 左向き
#define MUKI_MIGI   2 // 右向き
#define MUKI_UE    3 // 上向き


横は「パターン絵」とでも言いましょうか。どこで「モーション絵」になるように定義をしているかと言うと、59行目です。
> int PIC_Walk_Step[4] = { 1,0,1,2 };
↑この数値は、モーション絵のパターン番号の定義です。「Hero_Step」という変数を1ずつカウントして足踏みを実現しています。
「0,1,2,3,0,1,2,3,…」に対応させて「1,0,1,2,1,0,1,2,…」という数値を導けるようにしています。こういうのは変数に入れて定義しておけば簡単に処理できます。

勇者の表示(描画)は、198行目の
> DrawGraph( 224,104,HDL_Graph_Hero[Hero_MUKI][ PIC_Walk_Step[(Hero_Step>>4)] ],TRUE );
です。
PIC_Walk_Step[(Hero_Step>>4)] の (Hero_Step>>4) は何かと言うと Hero_Step÷16 の商を求める計算式の高速版です。2の4乗16ですから。
16で割っている理由は、足踏みのアニメーション絵の切り替え速度が そのままのHero_Stepの値 では早すぎたからです。
つまり、16/60秒(約 0.3秒)ごとに1枚ずつ、足踏みのアニメーション絵の切り替えをやっているのです。
1モーションに4枚の絵を使っていますので、16/60秒×4倍=64/60秒(約 1.1秒)かかる、という計算になります。

Hero_Step のカウントは 189行目の
> Hero_Step = (++Hero_Step)&(63);
↑これです。増加させたあとの&(63)は、カウンタの周期が1モーション=64フレーム(16フレーム×4パターン絵)だから0~63の範囲になるようにする計算式です。
63(10進数)は、0x3F(16進数)/ 00111111(2進数)です。
つまり、カウンタ値を 00111111(2進数)でマスクして値が63を越えない処理をする均一速度な高速版なのです。
解りやすく書いたら
++Hero_Step;
if(Hero_Step > 63) Hero_Step = 0;

↑こういうことです。if文は、コンパイルすると「条件分岐処理」に機械語翻訳される(アセンブル)ので真の場合と偽の場合とで処理速度が変化します。その為、スピード重視なゲームではif文の羅列はお薦め出来ません。

2進数で考える、左シフト演算や&演算は、ビット演算です。論理ビット演算と算術ビット演算があります。コンピュータが得意な技ですから覚えてくださいね。論理ビット演算は ふつう unsigned数値でやります。算術ビット演算は符号付き数値でやります。

シフト演算については過去記事をおさらいして下さい


背景の描画方法は、解説要らないと判断しましたので省略。

次回は、マップチップを使った背景の実装とスクロール実装をやります。


続きを読むに、RPG_TEST_v0.01 の全ソースコードを貼り付けてあります。以後、必要箇所だけソースコード掲載します。
閲覧推奨ブラウザは、FireFoxです(行番号も表示されるので)。


-- 続きを読む --
関連記事
スポンサーサイト

[edit]

CM: 0
TB: 0

page top

PSPプログラミング PNG画像について調べました。 

2010/10/26
Tue. 22:21

今回は、DXライブラリPortable が採用している画像形式のPNG(ピング)について調べ上げた内容を書きます。

◎1ピクセルを構成するデータ長は、フルカラー時で最大64ビット長。通常のフルカラー時では32ビット長。
【 フルカラー時の内訳 】
・64ビット時(フルカラー64ビット / 48ビットカラー)
   透過情報=16ビット長
    青成分=16ビット長
    緑成分=16ビット長
    赤成分=16ビット長

・32ビット時(フルカラー32ビット / 24ビットカラー / 16,777,216万色)
   透過情報=8ビット長
    青成分=8ビット長
    緑成分=8ビット長
    赤成分=8ビット長

◎最大16ビット長のグレイスケール
【 グレイスケール時の内訳 】
・1つのピクセルが 白・灰・黒 65536階調で表現される図形データ

◎最大8ビット長のインデックスカラーモード(256色モード)
【 インデックスカラー時の内訳 】
・フルカラー(16,777,216色)から256個までの色を自由に選んで作成した図形データ
・1ピクセルが1バイト長(=8ビット長)で表現可能(パレット色コードは別として)
・最大256個のインデックスを参照して、対応する 32ビット長のパレット色コードを割り出して描画する方法が適切な表示方法です
・32ビット長のパレット色コードの内訳は、
   8ビット空き(予約)
   青成分=8ビット長
   緑成分=8ビット長
   赤成分=8ビット長
・透過情報は含まれない

大抵のゲームのキャラクタデータに使われるのは、256色モードのPNG、あるいはそれに近いデータの場合である事が多いです。データサイズ節約。
疑問 … 256色PNGは透明が表現できないのでは?
答え … そんな事はありません。任意の1色を透明として描画しない事により透明を擬似実現する事が可能です。
      そういう処理をする関数を作らないといけませんが。(^^;;;

一般に、フルカラー32ビットカラーのPNG画像の構造は、32ビットカラーBITMAP画像を ZIP圧縮したバイナリの構造とデータが良く似ている、と言われます。
フルカラーPNG画像の正体は、ZIP圧縮したBITMAP画像に近い、という事です。

PNG画像はそのままグラフィック画面に描画できる構造にはなっていないので、BITMAPデータに復元してから(デコード処理)画像データとして利用します。
一方、JPEG画像は別の圧縮方法を採用した画像データなので、これもBITMAP画像に復元してから画像データとして利用します。
ゆえに、JPEGやPNGは 読み込んでから復元作業をしてから表示するので、復元にかかる時間だけ表示待ち時間が発生します。

PNG画像は、使われている色数が少ない場合は 多い場合よりもファイルサイズが小さくなります。復元するとどっちも同じデータサイズになりますが。

DXライブラリPortableでは、PNG画像は 読み込みしてBITMAP画像データに変換した状態でメモリに格納されています。そうすることにより、画像の加工(拡大・縮小・回転・変形など)が楽に行なえるのです。

【 PNG画像の長所 】
・PNG圧縮されている分だけBITMAPより早く読み込みできる
・1ピクセルごとに、色の 透明化や半透明化を指定可能(フルカラー時 限定)


ここに書き漏れている事があったら追加しますので情報をお待ちします。
間違えていたら確認後に修正します。


関連記事

[edit]

CM: 0
TB: 0

page top


h o m e |


 

2010-10