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

それでは、前回の配布物についての説明とか書きます

以前作った、イラスト鑑賞アプリでは、480x272の寸法(憂煉氏によると 512x512ぶん消費している、との事)でメモリ上に17枚までしか画像データが持てない、という事が解ったのでなるべく小さいアニメーション・セルを使ってみました。

この千早ちゃんセルは、165x272 の寸法で26枚あります。なんとかメモリに収まってヨカッタ

さて、これを PSP実機で鑑賞してみると、時々 フレーム落ちしてますが、それは透過情報ありのPNG画像を、背景画像とORで合成して貼り付ける処理をしているのが主な原因の一つだと思われます。

千早ちゃんセルを描画している処理は、これなので、↓↓
> int DrawGraph( X座標, Y座標, 画像のハンドル, 透過フラグ);
「透過フラグ」を FALSE にするともうチョイ描画速度が速くなってフレーム落ちが無くなるであろうと推測されます。

よく考えると、アイドルマスターSPは3Dポリゴン処理を 物凄く頑張っているなぁと思いますよ。

アニメーションをやる場合、透過情報付きPNG画像でやるのは効率が悪いのです。
アニメーションはコマが多くなるのでなるべく小さい、1ピクセルを1バイト情報でまかなえる画像を使ってやるのが一般的です。それがスプライトを使った簡易アニメーションです。
ゲームで良く見られる、登場人物などのスプライトの、簡易アニメーション処理ですね。

例を挙げるなら、ドラクエのキャラの歩くモーションだったり、格闘ゲームの必殺技を繰り出す時の動作のモーション(波動拳のアニメーションとか)だったりします。

で、上記のアニメーションは「セルを使った、動作ごとのアニメーション」とでも言っておきましょう。


もう一つのアニメーションとは、「画面のスクロール」です。
『千早が765衣装で吹っ切れた!? PSP』の動画で、背景が ゆっくりと 左右にスクロールしているのに気付いた方も多いと思います。

同じ絵を、画面表示のタイミングでちょっとずつ右方向へ表示座標をずらしながら描画し続けると、その絵が右に流れてゆく、という錯覚を与えます。これが画面スクロールの原理です。

画面の左右スクロールの際に気を付けなくてはいけないのは、左右へ速く画面スクロールさせてしまうと、見ている人が酔っ払います、吐き気を もよおす恐れもあるのでやってはいけません、という事。


PSPのテクスチャ寸法は、最大 512x512 で、PSPの画面寸法は、480x272 ですね。それでは 512-480 = 32 で横幅が 32ピクセルしか動かせないよ~と思っている方、DXライブラリには、画像の 拡大・縮小 描画機能もあるのですよ、と言っておきます。
画像の拡大描画だと、縦・横に2倍させれば 512x512寸法のテクスチャが 1024x1024寸法であるかの様に振舞う事ができます。これは便利ですね。


おさらい

アニメーションには 2種類あります。
・フレーム毎に絵が変化するパラパラまんが的なモノ
・同一画像の連続移動によるスクロール的なモノ

まだ他にも種類があるかも知れませんので、ご存知の方、教えて下さいませ。

次回は、ドラクエのキャラの歩くモーションのアニメーションをやります。
またもや透過情報付きのPNG画像でやります。単純なサンプル物が出来るかと思います。


「続きを読む」に、『千早が765衣装で吹っ切れた!? PSP』のソースコードの簡易版を貼り付けておきます。
(閲覧の推奨ブラウザは Firefoxです)

CHIHAYA.c


  1. /*****************************************************************************
  2. * CHIHAYA.c DXライブラリPortable v0.5.7版                 *
  3. *      簡易版 『千早が765衣装で吹っ切れた!? PSP』          *
  4. *                                      *
  5. *     このソースコードはBSDライセンスとします              *
  6. *                                      *
  7. *             製作:猫山猫三郎猫宗 in 2010.10.14(THU) to 18(MON) *
  8. *****************************************************************************/
  9. #include <dxlibp.h>
  10. #include <stdio.h>
  11. #include <string.h>
  12. /*****************************************************************************
  13. * groval
  14. *****************************************************************************/
  15. int Graph_handle[27]; // 画像のハンドル
  16. /*****************************************************************************
  17. * Original Functions
  18. *****************************************************************************/
  19. void main(void);
  20. void action(void);
  21. int pic_load(void);
  22. int initton(void);
  23. /*****************************************************************************
  24. * もじゅ~る・いんふぉ / メインコードはユーザモード
  25. *****************************************************************************/
  26. PSP_MODULE_INFO("PSP_CHIHAYA", PSP_MODULE_USER, 0, 0);
  27. PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
  28. /*****************************************************************************
  29. * main
  30. *****************************************************************************/
  31. void main(void)
  32. {
  33.   DxLib_Init();
  34.   if(initton() == 0)
  35.     action();  // 初期化成功(正常時)の時だけ action()関数を実行
  36.   DxLib_End();
  37. }
  38. /*****************************************************************************
  39. * sub2 アニメーション動画をやるのだだだッ!!
  40. *****************************************************************************/
  41. void action(void)
  42. {
  43.   int num=1; // アニメーション・セル番号
  44.   // ここからループします ↓↓
  45.   while(1) {
  46.     ProcessMessage();  // パッド読み取り本体
  47.     if((GetInputState()) == DXP_INPUT_LTRIGGER) { // Lトリガー押されたら
  48.       return; // Lトリガーで抜ける
  49.     }
  50.     // アニメーション処理
  51. /////// DrawGraph( 0,0,Graph_handle[0],FALSE);     // 背景画像
  52.     DrawBox(0,0,480,272,DXP_COLOR_BLUE,TRUE);  // 青背景
  53.     DrawGraph( 126,0,Graph_handle[num],TRUE ); // 千早ちゃんセル
  54.     DrawFormatString(300, 220,DXP_COLOR_BLACK,"Lトリガー押しで終了");
  55.     ScreenFlip(); // 垂直同期信号を待つ(1/60秒)1回目
  56. /////// DrawGraph( 0,0,Graph_handle[0],FALSE);     // 背景画像
  57.     DrawBox(0,0,480,272,DXP_COLOR_BLUE,TRUE);  // 青背景
  58.     DrawGraph( 126,0,Graph_handle[num],TRUE ); // 千早ちゃんセル
  59.     DrawFormatString(300, 220,DXP_COLOR_BLACK,"Lトリガー押しで終了");
  60.     ScreenFlip(); // 垂直同期信号を待つ(2/60秒 == 1/30秒)2回目
  61.     num++; // 次のセルへ
  62.     if(num >= 27) num = 1; // セル番号を最初へ
  63.   }
  64. }
  65. /*****************************************************************************
  66. * sub3 グラフィック画面の設定などの関数
  67. *****************************************************************************/
  68. void ScreenSettings()
  69. {
  70.   SetDisplayFormat(DXP_FMT_8888);     // 画面のピクセルフォーマットを32Bit色モードに
  71.   SetWaitVSyncFlag(TRUE);         // 画面更新の際、垂直同期待ちをしてから行なう様に
  72.   SetDrawArea(0,0,480,272);        // 描画可能領域を全領域に設定
  73.   SetDrawBright(255,255,255);       // 描画する色の輝度を最大に
  74.   SetGraphMode(480, 272, DXP_FMT_8888);  // フル画面サイズ & 32Bit色モード
  75.   ClearDrawScreen();           // 描画先のグラフィックスをクリアする
  76.   ChangeFontType(DX_FONTTYPE_NORMAL);   // エッジ無しノーマル文字にする(IntraFont)
  77. }
  78. /*****************************************************************************
  79. * sub5 画像データ・ローダー関数
  80. *****************************************************************************/
  81. int pic_load(void)
  82. {
  83. const char *pic_filename[]={
  84.   "PIC/haikei.png", // 背景
  85.   "PIC/01.png",   // 01
  86.   "PIC/02.png",   // 02
  87.   "PIC/03.png",   // 03
  88.   "PIC/04.png",   // 04
  89.   "PIC/05.png",   // 05
  90.   "PIC/06.png",   // 06
  91.   "PIC/07.png",   // 07
  92.   "PIC/08.png",   // 08
  93.   "PIC/09.png",   // 09
  94.   "PIC/10.png",   // 10
  95.   "PIC/11.png",   // 11
  96.   "PIC/12.png",   // 12
  97.   "PIC/13.png",   // 13
  98.   "PIC/14.png",   // 14
  99.   "PIC/15.png",   // 15
  100.   "PIC/16.png",   // 16
  101.   "PIC/17.png",   // 17
  102.   "PIC/18.png",   // 18
  103.   "PIC/19.png",   // 19
  104.   "PIC/20.png",   // 20
  105.   "PIC/21.png",   // 21
  106.   "PIC/22.png",   // 22
  107.   "PIC/23.png",   // 23
  108.   "PIC/24.png",   // 24
  109.   "PIC/25.png",   // 25
  110.   "PIC/26.png",   // 26
  111.   "おわる"
  112. };
  113.   int i;
  114.   // なう・ろーでぃんぐ画像を表示
  115.   DrawBox(0,0,480,272,DXP_COLOR_BLUE,TRUE);
  116.   DrawFormatString(150, 120,DXP_COLOR_WHITE,"なう・ろーでぃんぐ!!");
  117.   ScreenFlip();
  118.   // 画像ファイル全部読み込み
  119.   for(i=1; i<=26; i++) {
  120.     Graph_handle[i] = LoadGraph(pic_filename[i]);
  121.   }
  122.   return(0);
  123. }
  124. ///////////////////////////////////////////////////////////////
  125. // sub6 初期化専門
  126. ///////////////////////////////////////////////////////////////
  127. int initton(void)
  128. {
  129.   ScreenSettings();
  130.   // 画像データ読み込み
  131.   return( pic_load() );
  132. }

 

Makefile

TARGET = PSP_CHIHAYA
OBJS = chihaya.o
 
PSPSDK=$(shell psp-config --pspsdk-path)
INCS = $(PSPSDK)/include $(PSPSDK)/DXP_v0.5.7/include
INCDIR = $(INCS)
 
CFLAGS = -Wall -G0 -O3 -fomit-frame-pointer -mgp32 -mlong32
 
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
 
LIBDIR = $(PSPSDK)/DXP_v0.5.7/lib
LDFLAGS =
LIBS = $(PSPSDK)/DXP_v0.5.7/lib/dxlibp.a
LIBS += -lpspgu -lz -lm -lpsprtc -lpspaudio -lpspaudiocodec\
-lpsputility -lpspvalloc -lpsppower
 
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = PSP CHIHAYA
PSP_EBOOT_ICON = ICON0.png
PSP_EBOOT_ICON1 = NULL
PSP_EBOOT_UNKPNG= NULL
PSP_EBOOT_PIC1 = NULL
PSP_EBOOT_SND0 = NULL
 
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak
 
# 以下、任意で(開発しているソースに依存)
chihaya.o : chihaya.c
 
 
関連記事
スポンサーサイト

[edit]

CM: 4
TB: 0

page top

この記事に対するコメント

DXPは1バイト/ピクセルのPNGフォーマットにも対応してますよ
当然ながら256色しか扱えなくなりますが

憂煉 #- | URL | 2010/10/18 23:52 * edit *

256色PNGって

256色PNGって、メモリ内部で32ビットカラーに拡張されないのかな?

猫山猫宗 #jjrqi.Ao | URL | 2010/10/19 00:19 * edit *

ちゃんとパレットを取得して使うように実装してありますよ。

憂煉 #- | URL | 2010/10/20 20:48 * edit *

白黒PNGにも対応とな!

グレースケールPNGにも対応とな!

ちょっと記事を修正せねばならんのう…。

猫山猫宗 #jjrqi.Ao | URL | 2010/10/21 23:40 * edit *

page top

コメントの投稿

Secret

page top

トラックバック

トラックバックURL
→http://nekoyama2gillien.blog36.fc2.com/tb.php/364-1d726c14
この記事にトラックバックする(FC2ブログユーザー)

page top


h o m e |


 

2017-08