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

DXライブラリPortable の実力を試すために、作ってみました。

その名も、「みくねぎっと。」  旗揚げならぬ、ネギあげゲームでっす。


             白あげてぇ~~♪


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



[edit]

CM: 15
TB: 0

page top

さて、いよいよ実践的なライブラリの導入をする日が来ました。

DXライブラリPortable

これは、「DXライブラリ」というWindows版ライブラリのPSP版です。
作者は 憂煉(ゆうれん)さんです。

彼については、PSPいじり と PSP用ライブラリ開発が大好きな方と伺っております。

この記事で紹介の v0.5.5 にはバグがあったので、v0.5.7 を導入することを強く推奨します。
>> PSPプログラミング PSPSDKにライブラリを追加しよう(4) DXLibP v0.5.7

-- 続きを読む --
関連記事

[edit]

CM: 2
TB: 0

page top

この記事は、古い DXライブラリPortable v0.4.14 の導入記事です

現在は DXライブラリPortable v0.5.7 でPSPプログラミングをやっているのでこの記事は必要な方だけ読んで下さい


続きに

-- 続きを読む --
関連記事

[edit]

CM: 0
TB: 0

page top

DXライブラリPortable を使ってプログラミングをしよう その1

まずは、mp3ファイルを再生するプログラムを作ることにします.
これをマスターできたら、mp3プレイヤー・アプリを作れるようになるかも知れませんね.

【 お約束事項 】
 DXライブラリPortable は MediaEngine側のCPUでmp3音声をデコードするコードを生成するのですc
 よって、スレッドの属性を ユーザーモードで書いてください.
 カスタムファームウェアのPSPの方は、リカバリーモードで Homebrew Game Folder を 1.50 Kernel では無い方(5.XX Kernel など)に設定してください.
 また、パソコンで WAVE から mp3 に変換する際は 「Lame Encoder」で行なって下さい.
 WAVE は、パソコンのシステム・サウンドファイルでも良いのですが サンプリング周波数が低かったり 再生時間が短かったりするので お手持ちの音楽CDアルバルを用意して下さい.

 mp3ファイルの作り方はこちらを参照のこと(Google検索)

 さて、mp3変換している間に EBOOT.PBP を作っちゃいましょう!
 使うライブラリは、最新版の DXライブラリPortable v0.5.7 です.
 >> DXライブラリPortable v0.5.7を導入しよう


ちゅうい!
 正常ビルドを確認したコンパイラは Minimalist PSPSDK v0.8.10 です

では、コピペ推奨で…… 今回は、各自コンパイルに挑戦してくださいっ

↓↓ファイル名は main.c でお願いします.

#include <dxlibp.h>
#include <pspaudiocodec.h>
#include <pspaudio.h>
#include <psputility.h>
#include <malloc.h>
#include <string.h>
#include <stdio.h>
#include <pspkernel.h>
#include <pspdisplay.h>
#include <pspuser.h>
#include <pspgu.h>
#include <pspctrl.h>


PSP_MODULE_INFO("PLaySound", 0, 0, 0);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

int main()
{
int handle_01; // サウンドのハンドル

if(DxLib_Init() == -1) { // もしライブラリの初期化に失敗したら
goto EXIT; // ラベル:EXIT へ飛びます
}

//=================================================================================
// まずは 全てのサウンドハンドルを削除します
InitSoundMem();

// ストリーミング再生モードに設定します(チョイ読みしながら再生)
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);

// 再生させる音声ファイルを指定します(mp3ファイルを用意してね)
if((handle_01 = LoadSoundMem("ms0:/MUSIC/a.mp3")) == -1) { // もしエラーが発生したら
goto EXIT; // ラベル:EXIT へ飛びます
}

// パンを中央に設定します
SetPanSoundMem( 0, handle_01);

// 再生しよう! 音声が鳴れば、大成功 v
PlaySoundMem( handle_01, DX_PLAYTYPE_NORMAL, TRUE);

// 再生が終わったら、サウンドハンドルの再生を停止します
StopSoundMem( handle_01 );

//---------------------------------------------------------------------------------

// ◆ 今度は、その音声ファイルを、パンを左にして再生してみます ◆

// パンを左側に設定します(範囲は -10000 ~ +10000)
SetPanSoundMem( -9000, handle_01);

// 再生しよう! 左から音声が鳴れば、大成功 v
PlaySoundMem( handle_01, DX_PLAYTYPE_NORMAL, TRUE);

// 再生が終わったら、サウンドハンドルの再生を停止します
StopSoundMem( handle_01 );

//---------------------------------------------------------------------------------

// ◆ 今度は、その音声ファイルを、パンを右にして再生してみます ◆

// パンを右側に設定します(範囲は -10000 ~ +10000)
SetPanSoundMem( 9000, handle_01);

// 再生しよう! 右から音声が鳴れば、大成功 v
PlaySoundMem( handle_01, DX_PLAYTYPE_NORMAL, TRUE);

// 再生が終わったら、サウンドハンドルの再生を停止します
StopSoundMem( handle_01 );

//---------------------------------------------------------------------------------

// 終わったので、サウンドハンドルを削除します
DeleteSoundMem( handle_01 );

//=================================================================================

// エラーが発生したら、すぐココに飛んできます
EXIT:;

DxLib_End(); // 終了します
return 0;
}



Makefile も コピペ推奨

TARGET = PLaySound
OBJS = main.o

PSPSDK=$(shell psp-config --pspsdk-path)
INCS = $(PSPSDK)/include $(PSPSDK)/DXP/include
INCDIR = $(INCS)

CFLAGS = -Wall -G0 -O3 -fomit-frame-pointer -mgp32 -mlong32

CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR = $(PSPSDK)/DXP/lib
LDFLAGS =
LIBS = $(PSPSDK)/DXP/lib/dxlibp.a
LIBS += -lpspgu -lz -lm -lpsprtc -lpspaudio -lpspaudiocodec\
-lpsputility -lpspvalloc -lpsppower

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = PLaySound
PSP_EBOOT_ICON = NULL
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

main.o : main.c


おまけの !_ビルド.bat

PATH=C:\pspsdk\bin\;C:\pspsdk\psp\bin\
DEL *.ELF
DEL *.SFO
DEL *.PBP
make
pause



【 このソースについて 】
ソースについてですが、メイン関数にこんなに長く書いてしまうのは本来はNGです.
全体の流れが分かるように、通して書いたまでです.
このソースが 理解できたらサブルーチンを作って分割してみるのを推奨します.

【 著作権とか 】
このプログラムコードは、DXライブラリPortable を使う想定で書いてあります.
もし、このソースをコンパイルして出来た実行モジュールを配布などするなら DXライブラリPortable の 著作権 表記指示に従ってくださるよう、お願いします.
私は、このソースに 著作権を設定しません.改造を推奨します、是非っ

【 ヒント 】
mp3ファイルの名前を日本語にした場合、コンパイルで 下記のような warning が発生することがあります.
main.c:35:34: warning: unknown escape sequence: '\217'
main.c:35:34: warning: unknown escape sequence: '\216'
↑↑ 原因は、その日本語文字列に「だめ文字」が含まれているからなので、【はるるん v0.3】でソースを修正して下さい.

実行結果が どうなるかは楽しみにとっておきますので、実行して確認して下さいませ.

解説は次回やります.


PSPプログラミング EBOOT.PBP 生成用 Makefile 記述方法
PSPプログラミング 正しい main( ) 関数の書き方を ご紹介
PSPプログラミング PSP の 1.50カーネルとか、3.xxカーネルとか についての講釈
PSPプログラミング 「CFW導入済み 全PSP」対応の Homebrew 作成方法
PSPプログラミング Windowsアプリ 制御文字リペア 【はるるん v0.3】 リリース!
PSPプログラミング PSPSDKにライブラリを追加しよう(4) DXLibP v0.5.7
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング DXライブラリPortable サウンド関数の解説(1)
PSPプログラミング DXライブラリPortable サウンド関数の解説(2)
PSPプログラミング DXライブラリPortable サウンド関数の解説(3)


関連記事

[edit]

CM: 0
TB: 0

page top

2つ前の記事で、DXライブラリPortable v0.5.5 を使った mp3再生のプログラムソースを公開したので、今回は 解説その(2)です.解説その(1)は、「PSPプログラミング DXライブラリPortable でプログラムの「核」を書く」編です。

前回の要領で、マニュアル(ヘルプ)を開きます.
すると、[メインページ]のタブが開いたところに こう書いてあります.

>説明に(本家互換)とある関数はDXライブラリと挙動がほぼ同じですので、本家の関数リファレンスも参考にしてください.

本家は、Windows版「DXライブラリ」ですよ~
>> DXライブラリ 関数リファレンスページ
   ↑↑ このページに、本家Windows版のDXライブラリ関数の一覧がありますので、ブラウザのお気に入りに登録してください.
あと、ネット環境が必須ですよん(このブログを見てる時点でネット接続してるような?)

まず、PSP版の DXライブラリPortable のサウンド関数を見ます.v0.5.5 に どんなのがあるか調べましょう.

ヘルプから [モジュール]タブ → [サウンド関連]タブ の順に クリックして下さい.
11個の関数がありますね.

まず何を書くか?……… はい、サウンドの初期化関数です.
>int InitSoundMem (void)
  ↑ どうやら、コレらしいと判明
       →つまり、出だしは InitSoundMem (); と記述

次は、初期設定関数を記述します.
>> サウンドハンドルにパンを設定する int SetPanSoundMem (int pan, int handle)
>> サウンドハンドルの音量を変更する int ChangeVolumeSoundMem (int volume, int handle)
>> ループ位置を設定する        int SetLoopPosSoundMem (int looppos_s, int handle)
>> ループ位置を設定する        int SetLoopSamplePosSoundMem (int looppos, int handle)
>> LoadSoundMemの挙動を変更します int SetCreateSoundDataType (int type)
実際は、初期化したときに初期値が代入されるので、必要時以外はいじらなくて良いのです。

「パン」は、音声が出力される位置のこと.
「音量」は、その時のPSPにより異なりますが、[+][-]キーに触らないで音量を設定できるらしいのですが
      安全面を考えて「Middle」くらいの 127 とかで良いかも(後で確認する事にします)
「ループ」は、「繰り返し再生」のこと。初期値は「先頭の位置」の「0」です.
「LoadSoundMemの挙動」は、mp3プレイヤー・アプリはストリーミング再生をする方式なので「DX_SOUNDDATATYPE_FILE」を指定.

ここで、各関数の引数(ひきすう/パラメータ)を見ると「handle」という変数名があります.
「handle」==「ハンドル」です。DXライブラリPortable では、音声を「ハンドル」で管理します.
音声ファイルの指定の時に「ファイル名」を記述し、以降は「ハンドル」で音声を再生したり停止したりループしたりを行ないます.

C言語/C++言語で ファイルを 管理する「fp=fopen("ファイル名","r"); の fp の扱い感覚」で音声が制御できます.
サウンド関連の関数で、「handle」の値が返ってくる関数を調べると……
>> int LoadSoundMem ( const char * filename ) 音楽データを読み込みます(ハンドルを取得)
        ↑ どうやらコレみたいです
関数の名前は自由に書けますので、たまたまこういう名前になっているだけす.
この関数は、ストリーミング再生の時は ファイルの存在チェック と ハンドルの取得 を行なっている様です.
詳しく知りたい方はソースを順に追って調べてください(実際にプログラムを実行しながら追跡するのを、「トレースする」と言います).
プログラミング (コンピュータ) - Wikipedia の記事内でトレースを検索


ループ位置の設定関数が2個(2種類)あり、良く解らないので本家の関数マニュアルで詳しく調べます.
>> DXライブラリ 関数リファレンスページ
ブラウザにて、[CTRL]+[F]で検索窓を開いて「SetLoopSamplePosSoundMem」を放り込むと……

ふむふむ、再開位置を「サンプル数(音声データの先頭位置からのバイト数)」か「ミリ秒単位(1/1000秒単位)」か、好きな方で指定するのだと判明しました.
ここでは、先頭の「0」にしておきます 好きな関数で指定できますね.


ココまでの情報で、mp3ストリーミング再生処理を書いてみると……


    int Sound_handle;  // サウンドのハンドル変数

// まずは 全てのサウンドハンドルを削除します(初期化)
InitSoundMem();

// ストリーミング再生モードに設定します(チョイ読みしながら再生)
SetCreateSoundDataType(DX_SOUNDDATATYPE_FILE);

// 再生させる音声ファイルを指定します(mp3ファイルを用意してね)
if((Sound_handle = LoadSoundMem("ms0:/MUSIC/a.mp3")) == -1) { // もしエラーが発生したら
goto EXIT; // ラベル EXIT: へ飛びます
}

SetPanSoundMem( 0, Sound_handle ); // パンを中央に設定
ChangeVolumeSoundMem( 127, Sound_handle ); // 音量を「中」==「127」に設定
SetLoopSamplePosSoundMem( 0, Sound_handle ); // ループ再生位置を先頭に設定

サウンド再生関数(); // (仮)
サウンド終了処理(); // (仮)
サウンドハンドル解放関数(); // (仮)

// エラーが発生したら、すぐココに飛んできます
EXIT:;



どうですか? 理解できていますか?
私は DXライブラリPortable の開発者では無いので、マニュアルなどを調べながら書いています.
やりたい処理を規則に従って記述しています. まだ解ってない関数は、赤い文字の様に日本語で処理を書いています.
関数名が分からなくても、やりたい事を書けばいいのがテキストエディタの長所です.
関数の名前は、関数名が判明した時に書き直せば良いのです.
もし、理想の関数が無かったら、存在する関数を組み合わせて作るのが基本です.
楽しくPSPプログラミングしましょう.

if文に goto EXIT; を書いたので、飛び先の「ラベル EXIT:」も必ず記述しておきます.
[必須] C++言語での「ラベルの書き方」を学習しておいて下さい.

記事が長くなったので、今回は ここまでです.
質問とか無いですか?


【 関連記事 】
PSPプログラミング PSPSDKにライブラリを追加しよう(2) DXLibP v0.5.5
PSPプログラミング DXライブラリPortable を使ってみよう(1) mp3再生
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング DXライブラリPortable サウンド関数の解説(2)
PSPプログラミング DXライブラリPortable サウンド関数の解説(3)
PSPプログラミング DXライブラリPortable サウンド関数で「ドドド」
PSPプログラミング DXライブラリPortable サウンド「ドドド」解説

関連記事

[edit]

CM: 6
TB: 0

page top

【 突然、この記事へ来た人の為に書いておくこと 】
 下記のソースは、DXライブラリPortable というライブラリを使用する事を前提に書いています.PSP用です.

今回のテーマは、「サブルーチン化」です.

何をサブルーチン化するか、決めます.
まぁ、サウンドの出力部分なのですが、「サウンドハンドル」と「パン」と「音量」をパラメータで渡すと MP3ファイル を再生してくれるのを作ります.

問題ないと思うので、そのサブルーチンだけのソースを書いてみます.


////////////////////////////////////////////////////////////////////////
// MP3ファイルを再生するサブルーチン(簡易チェック付き)
////////////////////////////////////////////////////////////////////////

int PlayMP3(Handle, Pan, Volume)
// 引数の説明とか (変数名の後はセミコロンですよ~)
int Handle; // サウンドハンドル
int Pan; // パン
int Volume; // 音量
{
// 規定範囲外の値ならエラー(-1)とする
if( (Handle == -1) // サウンドハンドル
||(Pan < -10000)||(10000 < Pan) // パン
||(Volume < 0)||(255 < Volume) ) { // 音量
return(-1);
}

// 音量を設定します
ChangeVolumeSoundMem( Volume, Handle );

// パンを設定します
SetPanSoundMem( Pan, Handle );

// mp3ファイルを再生します
PlaySoundMem( Handle, DX_PLAYTYPE_NORMAL, TRUE );

// 再生を停止します
StopSoundMem( Handle );

return 0; // 値を返す関数では、必ず「return」を記述すること
}



この関数ですが、正常終了すると 0 が返り、値を間違えると -1 が返ります(バレバレ).

次回は、これらの関数を組み合わせて、ちょっとしたプログラムを書いてみます.


【 関連記事 】
PSPプログラミング PSPSDKにライブラリを追加しよう(2) DXLibP v0.5.5
PSPプログラミング DXライブラリPortable を使ってみよう(1) mp3再生
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング DXライブラリPortable サウンド関数の解説(1)
PSPプログラミング DXライブラリPortable サウンド関数の解説(2)
PSPプログラミング DXライブラリPortable サウンド関数の解説(3)
PSPプログラミング DXライブラリPortable サウンド関数で「ドドド」
PSPプログラミング DXライブラリPortable サウンド「ドドド」解説

関連記事

[edit]

CM: 0
TB: 0

page top

キミは このタイトルを見た瞬間、「やれやれだぜ」と言う………。

やっぱし、ジョジョ好きなんですわwww
デスクトップでもジョジョネタやりましたが、MP3でもジョジョネタやります(えっへん)

ダウンロード
ちゅうい : PSPを 3.xx以降カーネルにしてから実行してください
(リカバリーメニューで Homebrew Game Folder を 5.XX Kernel に設定)

ソースコードを見たい方は、続きをドウゾ。


【 関連記事 】
PSPプログラミング PSPSDKにライブラリを追加しよう(4) DXLibP v0.5.7
PSPプログラミング DXライブラリPortable を使ってみよう(1) mp3再生
PSPプログラミング DXライブラリPortable でプログラムの「核」を書く
PSPプログラミング DXライブラリPortable サウンド関数の解説(1)
PSPプログラミング DXライブラリPortable サウンド関数の解説(2)
PSPプログラミング DXライブラリPortable サウンド関数の解説(3)
PSPプログラミング DXライブラリPortable サウンド関数で「ドドド」
PSPプログラミング DXライブラリPortable サウンド「ドドド」解説


-- 続きを読む --
関連記事

[edit]

CM: 0
TB: 0

page top

DXライブラリPortableがヴァージョンアップです。
バグ修正版なので、まだ v0.5.6以下を導入したままの方は 思い切って取り替えて下さい。

これは、「DXライブラリ」というWindows版ライブラリのPSP版です。
作者は 憂煉(ゆうれん)さんです。

では、ダウンロードから。

DXライブラリPortable
↑↑ クリックして入室
ページの左側に、「DX Library Portable」という項目があります。
そこをクリックします。

現在の最新版です。 バグ取りしてある安心版。  ヴァージョン 0.5.7 。
まだ未定ですが、憂煉氏が C++言語版のDXライブラリPortable を作りたいと意見しておられました。 うほっ、3D強化大作戦!!

ダウンロードしましょう。
【 必要なファイル 】
・dxlibp_v0.5.7.zip    ← これがライブラリ本体です
・dxlibp_help_v0.5.1.zip ← これがヘルプファイルです(下の方にあります)
( DXP ver.0.5.7 のソースは、SVN から取得して下さい、との事。欲しい人はダウンロードするのだっ )

【 新アプリの導入 】
制御文字リペア 【はるるん v0.2】
日本語を正しく修正してくれるアプリです。使い方は、ReadMe.嫁.txt を読んで下さい。
好きなフォルダにインストール出来ます。レジストリは未使用。
ソース中に「だめ文字」が存在する場合に使います。
だめ文字についての Wikipedia 資料

【 インストール方法 】
1. どこでも良いので、仮フォルダ内にて、dxlibp_v0.5.7.zip を解凍します
2. PSPSDKのインストール先の、SDKフォルダを開きます(標準PATHは、C:\pspsdk\psp\sdk\)
3. そこに、'DXP_v0.5.7'というフォルダを新規作成します。
4. そのDXP_v0.5.7フォルダの直下に、'include'フォルダと'lib'フォルダと'HELP'フォルダを新規作成します
5. 標準PATHで C:\pspsdk\psp\sdk\DXP_v0.5.7\include\ に 1.の dxlibp.h を入れます
6. 標準PATHで C:\pspsdk\psp\sdk\DXP_v0.5.7\lib\ に 1.の dxlibp.a を入れます
7. 標準PATHで C:\pspsdk\psp\sdk\DXP_v0.5.7\HELP\ に dxlibp_help_v0.5.1.zip を解凍して入れます
8. 7.の中にある、index.html ファイルのショートカットを作り、わかりやすい名前にリネームして(DXライブラリPortableヘルプ とか)、デスクトップへ貼り付けます
9. 完了

おまけ
【 インストール方法 】の 5. の dxlibp.h のショートカットを作り、わかりやすい名前にリネームして(DXライブラリPortableヘッダ とか)、デスクトップへ貼り付けておいても良いかも知れません。

【 ヘルプファイルの使い方 】
DXライブラリPortable の関数のマニュアルとして参照します。
ショートカットを作ってデスクトップに配置しておくと、参照しやすいです(上の記事【 インストール方法 】を参照)
ブラウザで見る形式のマニュアルなので、「IEが重いよ~」の方は、軽いブラウザをインストールして、そのブラウザで閲覧して下さい。お勧めのブラウザは Firefox とか Google Crome です。
なお、そのブラウザに お気に入りも 複写(同期)したい場合は、無料アプリの BookSync を使用してください。

【 振り返る 】
ここで、DXライブラリPortableさんに戻って、ページ内容全部を軽く閲覧しておきましょう。
色々な発見があるかと思いますよ。特に掲示板は重要です。

【 ライブラリの使い方 】
ライブラリなので、コンパイル時に使用します。

MAKEFILEの書き方(DXライブラリPortable v0.5.7版)
リンクしているライブラリは、v0.5.5 と同じです。
雛形です。コピペ推奨。赤い文字は必須。青い文字は必要に応じて書き換えてください。
TARGET = NICEGAME
OBJS = main.o graphic.o sound.o input.o sub1.o sub2.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_EBOOT_ICON = NULL or アイコンのPATH(ICON0.png)144x80
PSP_EBOOT_ICON1 = NULL or 動画アイコンのPATH(ICON1.PMF)144x80
PSP_EBOOT_UNKPNG= NULL or ゲーム説明画像のPATH(ICON1.PNG)310x180
PSP_EBOOT_PIC1 = NULL or アイコンの背景画像PATH(PIC1.png)480x272
PSP_EBOOT_SND0 = NULL or 音楽ファイルのPATH(SND0.AT3)500KB以内

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

# 以下、任意で(開発しているソースに依存)
main.o : main.c main.h mydef.h graphic.h sound.h input.h
graphic.o : graphic.c graphic.h mydef.h main.h
sound.o : sound.c sound.h mydef.h main.h
input.o : input.c input.h mydef.h main.h



EBOOT.PBPに日本語文字で名前を付けたい場合は…
開発したPSPソフトウェアに日本語文字で名前を付けたい場合は、NAGAOKA STATIONさんで配布中のWindows用アプリ PSP用ソフトのアイコンを抽出・変更するソフト V0.04b を使用して下さい。

【 DXPを利用しての開発で気を付ける事など 】
その1.
DXライブラリPortable は フリーウェアですが、著作権は 作者の憂煉氏にあります。
DXライブラリPortable を利用、もしくは DXライブラリPortable のソースコードを利用、の場合は、製作した作品の付属ドキュメントなどに、「DXライブラリPortable を使用して開発しました」宣言を書き添えるように心がけてください。また、mediumgauge氏の全角文字表示ライブラリも同梱されているので「mediumgauge氏の全角文字表示ライブラリも使用しています」宣言も書き添えるように。マナーです。
その2.
>DXライブラリPortable の バージョン 0.5.xの場合、ソースの宣言部分で
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER);
>ではなくて
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
>にしないといけないです.

>VFPUを使う人へ
>乱数生成関数、算術支援関数、DrawModiGraph、DrawRotaGraph及びその派生関数では内部で一時的にVFPUレジスタの0~2ブロックを使っています。
>それらの関数が呼ばれた時点で該当するVFPUレジスタの内容が破壊されますので、注意してください。
>また、今後のアップデートでVFPUを使う関数が増えたり、使うレジスタを増やす可能性があります。

と、README.TXT に書いてありました。




次の記事は、『DXライブラリ v0.5.7の改造 できるかな?』です。

【 関連記事 】
PSPプログラミング EBOOT.PBP 生成用 Makefile 記述方法
PSPプログラミング プラグイン生成用 Makefile 記述方法
PSPプログラミング テキストエディター【 Apsaly 】のススメ
PSPプログラミング インクルードやリンクについての講釈
PSPプログラミング PSPSDK に同梱されているライブラリの一覧とリンク記述
PSPプログラミング コンパイルオプションについて調べてみました。
PSPプログラミング 制御文字リペア 【はるるん v0.2】リリース
PSPプログラミング PSPSDKにライブラリを追加しよう(1) CFW4.01m33
PSPプログラミング PSPSDKにライブラリを追加しよう(3) DXLibP v0.4.14
PSPプログラミング PSPSDKにライブラリを追加しよう(4) DXLibP v0.5.7


関連記事

[edit]

CM: 1
TB: 0

page top

ども、暫くぶりの更新です。
DXライブラリPortable を色々弄ってたら、こんなに日にちが経っていました。

今回はちょっと手抜き仕様です。

この記事は、DXライブラリPortable を改造するという、上級者向けです。
弄りたくない人は、読むだけにしてね

まずは、DXライブラリPortable v0.5.7 のソースのダウンロードから
↓↓ココ(一部、ファイル名が文字化けしますが)
http://sourceforge.jp/projects/dxlibp/svn/view/dxlibp/trunk.tar.gz?root=dxlibp&view=tar


判明した DXライブラリPortable の上限数 と 変数名

ありか       変数名            何を扱う値か?        設定値
sound.h  DXP_BUILDOPTION_SOUNDHANDLE_MAX   サウンドハンドルの最大数      32
dxlibp.h  DXP_BUILDOPTION_FILEHANDLE_MAX   ファイルの同時読み出し最大数    32
dxlibp.h  DXP_BUILDOPTION_FILENAMELENGTH_MAX ファイル名の最長          260
dxlibp.h  DXP_BUILDOPTION_TEXTURE_MAXNUM   内部で持つテクスチャの最大枚数   512
dxlibp.h  DXP_BUILDOPTION_GHANDLE_MAXNUM   グラフィックスハンドルの最大数  2048
dxlibp.h  DXP_BUILDOPTION_MODEL_MAXNUM    3Dモデルの最大数          16
dxlibp.h  DXP_BUILDOPTION_FONTHANDLE_MAX   フォントのハンドル最大数      8


コレを見ると、サウンドが 32種類まで となっていますので、もっと効果音を増やしたい人は、
64 とか 96 に変更するといいでしょう。ただし、メモリ使用量は確認しないとだめですよ

グラフィック は 2048種類までですが、これは問題ないかと思います。
小っこいスプライトを大量に使用したい人とかは、値を増やしてみて下さい。

ファイル名の最長は、PSPは Windowsと同じ 256文字までだと思うので弄らなくて良し。
他の値については、自分が作りたいソフトウェアに合わせて設定してください。

弄り終えたら DXライブラリPortable の再構築(コンパイル)をして PSPSDK に登録すればいいです


関連記事

[edit]

CM: 7
TB: 0

page top

PNG(ピング)画像についてのお勉強

DXライブラリPortable を使った第1弾目は 『 MP3音声の再生 』でした。
ゲームの音声・音楽・効果音 面は、全部 MP3音声の再生で行なえます。

第2弾は、静止画像の表示(描画)をしようと思います。


● まず、静止画像とは何か? から。
   動画ではない、1枚絵 の事です。 分かりますね。

● 静止画像の種類は?(代表的なのんを抜粋)
   Windows標準規格の 『ビットマップ』
   ビットマップ画像の符号化形式の一種 『TIFF』
   デジタルカメラに採用されている、『JPEG』
   透明色対応の 最大256色『GIF』
   透明・半透明対応の、『PNG』


以上 紹介しましたが、DXライブラリPortable で扱える画像形式は『PNG』だけです。
PNG画像について知っておいて頂きたいことは、
・画像が圧縮されたデータファイルになっている
・ファイルサイズは、ビットマップで保存するより小さい(つまり、早く読み出せる)
・PNG形式で 繰り返し保存をしても、画像は劣化しない(JPEGは 劣化します)
・最大1677万7216色(または その倍)[注意] で、256色、白黒2色、グレイスケールなどもサポートしている
・色数の少ない画像をPNGで保存すると、JPEGで保存するよりファイルサイズが小さくなる
・アルファチャンネル を持っているので、1つの画素単位で 透明・半透明 に対応
・libpng というライブラリで、展開・圧縮が可能
・PSPの内部ライブラリでは、寸法制限がある(最大 512x512 まで)
・無料で扱えるフォーマットである(ただし、ライセンス提示は必要)
[注意]
PNGのデータ部分は、アルファチャンネル8ビットと色データ24ビットor48ビットらしいです。情報お願いします

わかりやすい PNG の話 for Web
PNGファイルのヘッダー構造
↑↑ こっちも一読してください

主にゲームで使えるのは、256色PNG と フルカラーPNG だと思います(もちろん透明色対応)

PNGで無い 256色画像 で透明色を入れるなら、255色+透明1色で、プログラマが任意の1色を透明色として扱います(描画しない色が透明なのです)。


PNGのデータ部分(フルカラー版)は、32ビット長になっています。
最上位の8ビットが アルファチャンネルで、以下24ビットが 色情報(RGB 各8ビット長)。

アルファチャンネルは、不透明度を表わす 8ビット長で、0x00 だと完全に透明、0x01 ~ 0xFE で半透明(半透明度が254段階)、0xFF で不透明、となっています。

なぜ透明色が必要なのか?
キャラクタの描画には、スプライトみたいに透明色表現があると便利だからです。
>> PSPプログラミング キャラクタの描画について


PNG画像の作り方は、以下参照のこと
アルファPNGの作り方
CG講座 FAQ[3] 透過PNGついて
フリーソフトウェア ViX を使って透過PNG作成

透明の無いPNG画像は、WindowsXPの標準アプリケーションである「ペイント」でも作成できます。
Windows7 の標準アプリケーションにも「ペイント」あります。

まずは皆さん、PNG画像を作ってみて下さい
JPEGとファイルサイズを比べてみてください。

関連記事

[edit]

CM: 0
TB: 0

page top

DXライブラリPortable でのPNG画像の扱い方

PNG画像ファイルを開いて libpng で読み込みながら展開してビットマップ画像形式(に近いもの)への変換作業をして、その画像データでやりとりをする、という方法を採用している様です。

そこら辺はもちっと詳しく調べておく必要があるかと思ってます。

DXライブラリPortable で PNG画像を描画させる場合は、2種類から選択できます。
1.一度きりの描画(NOW LOADING とか)
2.画像ハンドルで管理しての描画

使い分け方は解りますね?

・一度きりの描画
  LoadGraphScreen( x, y, filename, trans); // 読み込みして描画して表示
  ScreenFlip();                  // 画面表示(実は表画面と裏画面を切り替え)
  ↑↑これ必要ですよ[2010/06/10]

・画像ハンドルで管理しての描画
  CG_Handle = LoadGraph(FileName); // 読み込みして画像ハンドル取得
  DrawGraph( x, y, CG_Handle, trans); // 画像ハンドルを指定して 描画
  ScreenFlip();               // 画面表示(実は表画面と裏画面を切り替え)

この後者の場合の「画像ハンドル」は、DXライブラリPortable v0.5.7では 2048 個まででしたね。
全部使い切ってみたいですなwww

冗談はさておき、ちょっと不親切に解説している理由は、自分で調べた事柄は忘れにくい という事なので あえて深い調査はしてないのです。習うより慣れろ、といった感じです。
プログラムを作るのはあなたなのですから。

えーと、「みくねぎっと。ソース公開&解説」まで、あと「パッドの読み取り」「マップチップ地図の中を歩き回ろう」「C++言語良質勉強サイト紹介」「ゲームについて考える」の4本となりました。

「みくねぎっと。ソース公開&解説」が終わったらちょっとお休みを頂きます。ゲーム作りをやりたいんですよ。


もうそろそろアイマスカタログの更新日だよな、とかw


関連記事

[edit]

CM: 1
TB: 0

page top

さて、いよいよ DXライブラリPortable を使ったパッド入力を解説する時が来ました.

DXライブラリPortable でのPSPパッド操作では、パッド入力にキーボードの指定キー押し割り当てが出来たり、キー入力に指定パッド入力割り当て(複数ボタン同時押し割り当て可能)や、OSKによる文字列の取得などをする事が可能です.

×ボタンにスペースキーを割り当てておくと、
×ボタンを押した時にスペースキーが押されたという情報を得る事が出来ます.

また、キー押下には複数のPSPパッド入力を割り当てることも可能なので
ZキーにLトリガーと×ボタンの2つを割り当てておくこともできます.

でも実際PSPにはキーボードが無いのでLトリガーと×ボタンの同時押しで
Zキーが押されたという情報になるみたいです.


まず、基本のパッド入力から

GetInputState(); という関数により、PSPSDK の sceCtrlReadBufferPositive(&pad, 1); と互換なパッド入力値を得ることが出来ます.

【 記述例 】
    int pad_states;       // パッド値を入れる変数

ProcessMessage(); // パッド読み取り本体
pad_states = GetInputState(); // パッド値を得る

これで得られる値の判定には、dxlibp.h での54行目からの定義値 を使います.
もちろん、pspctrl.h の定義値を使っても良いです(ユーザーモードのん限定).
コピペ用に書いておきます.
DXP_INPUT_UP        DXP_INPUT_RIGHT     DXP_INPUT_DOWN   DXP_INPUT_LEFT
DXP_INPUT_TRIANGLE DXP_INPUT_CIRCLE DXP_INPUT_CROSS DXP_INPUT_SQUARE
DXP_INPUT_LTRIGGER DXP_INPUT_RTRIGGER DXP_INPUT_START DXP_INPUT_SELECT

[ ちゅうい ]
GetInputState(); 単体には パッドの読み取り機能は無いので、ProcessMessage(); を実行してパッド読み取りを行なう必要があります.ちょっと不便.


次に、DXライブリラリ互換なパッド読み取りの関数を紹介します.

【 記述例 】
    int pad_Buttons;     // パッド値を入れる変数

ProcessMessage(); // パッド読み取り本体
pad_Buttons = GetJoypadInputState(DX_INPUT_PAD1); // DXライブラリ用に変換されたパッド値を得る

これで得られる値の判定には、dxlibp.h での80行目からの定義値 を使います.
コピペ用に書いておきます.
PAD_INPUT_DOWN    PAD_INPUT_LEFT  PAD_INPUT_RIGHT  PAD_INPUT_UP
PAD_INPUT_A PAD_INPUT_B PAD_INPUT_C
PAD_INPUT_X PAD_INPUT_Y PAD_INPUT_Z
PAD_INPUT_L PAD_INPUT_R
PAD_INPUT_START
PAD_INPUT_M PAD_INPUT_D PAD_INPUT_F PAD_INPUT_G
PAD_INPUT_H PAD_INPUT_I PAD_INPUT_J PAD_INPUT_K
PAD_INPUT_LL PAD_INPUT_N PAD_INPUT_O PAD_INPUT_P
PAD_INPUT_RR PAD_INPUT_S PAD_INPUT_T PAD_INPUT_U
PAD_INPUT_V PAD_INPUT_W PAD_INPUT_XX

DXライブラリは Windows用のライブラリです.パソコンの特殊パッドにも対応する為に沢山の入力値が用意されているのだと思います.


パッド押下にキー押下を割り当てるには?

【 記述例 】○ボタンにリターンキーを割り当てる
SetJoypadInputToKeyInput( DX_INPUT_PAD1, PAD_INPUT_A, KEY_INPUT_RETURN, -1, -1, -1 ) ;

パッドの入力値には、GetJoypadInputState(); で得られる値を記述します

早見対応表
[↓] PAD_INPUT_DOWN    [○] PAD_INPUT_A   [L]  PAD_INPUT_L
[←] PAD_INPUT_LEFT [×] PAD_INPUT_B [R]  PAD_INPUT_R
[→] PAD_INPUT_RIGHT [△] PAD_INPUT_X [スタート] PAD_INPUT_START
[↑] PAD_INPUT_UP [□] PAD_INPUT_Y [セレクト] PAD_INPUT_M

キーの入力値には、dxlibp.h での118行目からの定義値 を使います.

KEY_INPUT_BACK    KEY_INPUT_TAB     KEY_INPUT_RETURN
KEY_INPUT_LSHIFT   KEY_INPUT_RSHIFT   KEY_INPUT_LCONTROL
KEY_INPUT_RCONTROL  KEY_INPUT_ESCAPE   KEY_INPUT_SPACE
KEY_INPUT_PGUP    KEY_INPUT_PGDN    KEY_INPUT_END
KEY_INPUT_HOME    KEY_INPUT_LEFT    KEY_INPUT_UP
KEY_INPUT_RIGHT   KEY_INPUT_DOWN    KEY_INPUT_INSERT
KEY_INPUT_DELETE   KEY_INPUT_MINUS    KEY_INPUT_YEN
KEY_INPUT_PREVTRACK KEY_INPUT_PERIOD   KEY_INPUT_SLASH
KEY_INPUT_LALT    KEY_INPUT_RALT    KEY_INPUT_SCROLL
KEY_INPUT_SEMICOLON KEY_INPUT_COLON    KEY_INPUT_LBRACKET
KEY_INPUT_RBRACKET  KEY_INPUT_AT     KEY_INPUT_BACKSLASH
KEY_INPUT_COMMA   KEY_INPUT_CAPSLOCK  KEY_INPUT_SYSRQ
KEY_INPUT_PAUSE
KEY_INPUT_NUMPAD0  KEY_INPUT_NUMPAD1  KEY_INPUT_NUMPAD2
KEY_INPUT_NUMPAD3  KEY_INPUT_NUMPAD4  KEY_INPUT_NUMPAD5
KEY_INPUT_NUMPAD6  KEY_INPUT_NUMPAD7  KEY_INPUT_NUMPAD8
KEY_INPUT_NUMPAD9
KEY_INPUT_MULTIPLY  KEY_INPUT_ADD   KEY_INPUT_SUBTRACT
KEY_INPUT_DECIMAL  KEY_INPUT_DIVIDE  KEY_INPUT_NUMPADENTER
KEY_INPUT_F1  KEY_INPUT_F2  KEY_INPUT_F3
KEY_INPUT_F4  KEY_INPUT_F5  KEY_INPUT_F6
KEY_INPUT_F7  KEY_INPUT_F8  KEY_INPUT_F9
KEY_INPUT_F10 KEY_INPUT_F11 KEY_INPUT_F12
KEY_INPUT_A KEY_INPUT_B KEY_INPUT_C KEY_INPUT_D
KEY_INPUT_E KEY_INPUT_F KEY_INPUT_G KEY_INPUT_H
KEY_INPUT_I KEY_INPUT_J KEY_INPUT_K KEY_INPUT_L
KEY_INPUT_M KEY_INPUT_N KEY_INPUT_O KEY_INPUT_P
KEY_INPUT_Q KEY_INPUT_R KEY_INPUT_S KEY_INPUT_T
KEY_INPUT_U KEY_INPUT_V KEY_INPUT_W KEY_INPUT_X
KEY_INPUT_Y KEY_INPUT_Z
KEY_INPUT_0 KEY_INPUT_1 KEY_INPUT_2 KEY_INPUT_3
KEY_INPUT_4 KEY_INPUT_5 KEY_INPUT_6 KEY_INPUT_7 
KEY_INPUT_8 KEY_INPUT_9 



複数のパッド押下にキー押下を割り当てるには?

【 記述例 】十字キー[↑]と□ボタンの同時押下に [F10]キーを割り当てる

SetKeyInputToPspInput( KEY_INPUT_F10, (DXP_INPUT_UP|DXP_INPUT_SQUARE) );

[ ちゅうい ]
パッドの入力値は GetInputState(); で得られる値でっす.DXP_INPUT_ナントカ



その2に続きますぅ~

【 関連記事 】
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系



関連記事

[edit]

CM: 1
TB: 0

page top

DXライブラリPortable を使ったパッド入力の続きです


「何か押してください」に使える記述の例

    do    {
ProcessMessage();
}while(CheckHitKeyAll() == 0);

[ ちゅうい ]
CheckHitKeyAll(); 関数は、ProcessMessage(); を呼ばない限り 正しく機能しません


「○ボタンを押して下さい」に使える記述の例

    SetKeyInputToPspInput( KEY_INPUT_RETURN, DXP_INPUT_CIRCLE );
while(1)
{
ProcessMessage();
if(CheckHitKey( KEY_INPUT_RETURN ) == 1) {
break;
}
}

[ ちゅうい ]
CheckHitKey(); 関数は、ProcessMessage(); を呼ばない限り 正しく機能しません
CheckHitKey(); 関数は、SetKeyInputToPspInput(); でパッドにキーを割り当てておく必要があります



キーボードのすべてのキーの押下情報を取得するには

  すべてのキーの押下情報を取得して、たくさんの判定をする時とかは、CheckHitKey();を使わないで GetHitKeyStateAll( ); で押下情報をまとめて取得しておいてから行なうと便利

char keystatebuf[256]; // キーの押下情報バッファ

ProcessMessage(); // パッドの読み込み
GetHitKeyStateAll( &keystatebuf[0] ); // 全キーの押下情報を取り込み

if( keystatebuf[KEY_INPUT_ESCAPE] != 0 ) {
エスケープキーが押された時の処理(キャンセル)
}else if( keystatebuf[KEY_INPUT_RETURN] != 0 ) {
リターンキーが押された時の処理(決定)
}else if( (keystatebuf[KEY_INPUT_LEFT] != 0)||( keystatebuf[KEY_INPUT_NUMPAD4] != 0 ) ) {
左に移動 の処理
}else if( (keystatebuf[KEY_INPUT_RIGHT] != 0)||( keystatebuf[KEY_INPUT_NUMPAD6] != 0 ) ) {
右に移動 の処理
}else if( (keystatebuf[KEY_INPUT_UP] != 0)||( keystatebuf[KEY_INPUT_NUMPAD8] != 0 ) ) {
上に移動 の処理
}else if( (keystatebuf[KEY_INPUT_DOWN] != 0)||( keystatebuf[KEY_INPUT_NUMPAD2] != 0 ) ) {
下に移動 の処理
}




その3へ続きますぅ~

【 関連記事 】
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系


関連記事

[edit]

CM: 0
TB: 0

page top

この記事では OSKについて解説

OSKとは、「On Screen Keybord」の略で、PSPでの文字入力インターフェースです.PSP-2000の説明書では、「キーボード」として説明されています.
PSPに名前を付ける場合とかUMDゲームでの名前入力の場合とかで使われていますね.

OSK

DXライブラリPortable ではOSKでの文字列の取得が簡単にできます.


OSKを呼び出す関数

int GetTextOSK( StrBUFF, StrLen, MODE, TITLE, INIT )
//パラメータの内訳
char *StrBUFF // 取得する文字列を格納するバッファの先頭ポインタ
int  StrLen // 取得する文字列の長さ(バイト数)
int  MODE // 入力モード(下で解説)
const char* TITLE // OSKのタイトル
const char* INIT // 既に入力されている文字列
//この関数の返り値
  成功:0
  失敗:-1

MODE について
  どのような文字列を入力するか指定するパラメータです.
  OR演算子 | で複数のを組み合わせて指定可能です.
       定義値              種類
   DXP_OSK_ALL 全て
   DXP_OSK_DIGIT 半角数字
   DXP_OSK_SYMBOL 半角記号
   DXP_OSK_SMALL 半角小文字
   DXP_OSK_LARGE 半角大文字
   DXP_OSK_DIGIT2 全角数字
   DXP_OSK_SYMBOL2 全角記号
   DXP_OSK_SMALL2 全角小文字
   DXP_OSK_LARGE2 全角大文字
   DXP_OSK_HIRAGANA ひらがな
   DXP_OSK_KATAKANA_H 半角カタカナ
   DXP_OSK_KATAKANA 全角カタカナ
   DXP_OSK_KANJI 漢字
   DXP_OSK_URL URL入力支援


文字列の入力が楽ちんになります♪
ただし、カーネルモードでは使用できません.ユーザーモード限定の機能でっす.


次はアナログパッドについてですぅ~

【 関連記事 】
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系



関連記事

[edit]

CM: 0
TB: 0

page top

PSPパッド入力のシメの解説は、アナログパッドについてです.

PSPSDKでは 全256段階の入力検出が可能ですが、DXライブラリPortable では ±1000の精度で検出が可能です.
【 サンプル 】

int analogX,analogY;


GetJoypadAnalogInput( &analogX, &analogY, DX_INPUT_PAD1 ); // アナログパッドの値を取得

関数の返り値は、成功:0、失敗:-1 です.
引数として渡すパラメータに、値が入力されます(ポインタを渡している事に注目!).

つまり、この場合は analogX analogY に それぞれ 値が入ってくる、という事です
 
 

まだあるよ、パッド関数
 
あまり有り難くない関数とか
・GetJoypadNum();
  → PSPにはパッドが1個だけ接続されているので、返り値は常に1です.
・StartJoypadVibration( DX_INPUT_PAD1, 1000, 2000 );
・StopJoypadVibration( DX_INPUT_PAD1 );
  → PSPには振動機能は無いので、呼び出しても無駄です.
・GetJoypadAnalogInputRight( &x, &y, DX_INPUT_PAD1 );
  → PSPには右側にアナログパッドが無いので、呼び出しても無駄です.



PSPの左側にだけ存在する、アナログパッド.右側にもあっても良いようなモノですが?
そしたらアナログパッドで リブルラブルが遊べちゃいますなww

(C)遊びをクリエイトするNAMCO - Libble Rabble -
libble_rabble.jpg
画像は Google検索で入手しました


【 関連記事 】
PSPプログラミング PSPパッドの読み取り(デジタル部分)
PSPプログラミング PSPパッドの読み取り(アナログパッド部分) 戦車ゲーム紹介
PSPプログラミング DXライブラリPortable でのパッド入力 その1
PSPプログラミング DXライブラリPortable でのパッド入力 その2
PSPプログラミング DXライブラリPortable でのパッド入力 その3 OSK
PSPプログラミング DXライブラリPortable でのパッド入力 その4 アナログ系


関連記事

[edit]

CM: 2
TB: 0

page top

2011年2月21日更新
このページのプログラムコードはカスタムファームウェアPSPでのみ正常実行できます

● 文字列を描画した時の横幅を取得する(本家互換)
int GetDrawStringWidth( const char *文字列, int 文字数 );

この関数は、描画予定の文字列の「行はみだしチェック」が出来たり、センタリングで文字列を描画したい時の計算などに使います。右寄せも可能

[サンプルコード]
このソースコードから生成される実行ファイルには、以下の著作物の著作権が適用されます
DXライブラリPortable  DX Library Portable Copyright (C) 2008-2010 Kawai Yuichi.
intraFont   Uses intraFont by BenHur
ソースコード自体はBSDライセンスでいいかも知れません

#include <dxlibp.h>
#include <string.h>
#include <pspgu.h>

// 32ビットカラーの16進数コードを RGBから作成する計算式(マクロ)
#define RGB(r,g,b) ((((long)b<<16)|((long)g<<8)|((long)r))|0xFF000000)

#define MOJIRETSU "フォントサイズ12 日本語フォント シフトJIS"
#define FONTSIZE 12

PSP_MODULE_INFO("intraFont TEST", 0, 0, 0);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

int main()
{
int yokohaba, x_ichi; // 横幅ピクセル数, X位置

if(DxLib_Init() == -1) { // もしライブラリの初期化に失敗したら
goto OWARI; // ラベル:OWARI へ飛びます
}
//=================================================================================
SetDisplayFormat(DXP_FMT_8888); // 32ビット色モード
ClearDrawScreen();
DrawBox(0,0,480,272,RGB(0,58,10),TRUE); // 画面を濃緑色で塗りつぶし

SetFontSize(FONTSIZE); // フォントサイズ設定
ChangeFontType(DX_FONTTYPE_NORMAL); // エッジ無しフォント
DrawFormatString(0,0,RGB(0,255,255),MOJIRETSU); // printf();相当
yokohaba=GetDrawStringWidth(MOJIRETSU,strlen(MOJIRETSU)); // ← これです!
DrawFormatString(0,FONTSIZE*1,DXP_COLOR_WHITE,"全部で半角%d文字分で、長さは%dピクセル"
,strlen(MOJIRETSU),yokohaba);
DrawFormatString(0,FONTSIZE*2,DXP_COLOR_WHITE,"上の文字列を行の中央に描画させます。");

x_ichi=(int)((480-yokohaba)/2)-1; // 計算w
DrawFormatString(x_ichi,FONTSIZE*3,RGB(0,38,255),MOJIRETSU); // printf();相当

ScreenFlip(); // 画面表示

do { // 何かボタンが押されるまで待つ処理
ProcessMessage();
}while(CheckHitKeyAll() == 0);
//=================================================================================
OWARI:;

DxLib_End(); // 終了します
return 0;
}

Makefile は、過去記事参照して下さい

[ 実行結果 ]
20100611221048.png
↑ほら、この通り。青色でセンタリングされて書かれたよ


[ちゅうい]
文字コードは、シフトJISのみ対応です。UTF-8系の文字コードは文字化けします
20100611235746.jpg
ソースコードの文字コードを UTF-8 にして、SetCodepoint(DXP_CP_UTF8);書いてみたんですが効きませんでした


ハンドルを扱う関数の解説は省略します。各自お勉強して下さい♪
InitFontToHandle
CreateFontToHandle
DrawStringToHandle
DrawFormatStringToHandle
GetDrawStringWidthToHandle
GetDrawFormatStringWidthToHandle
DeleteFontToHandle


関連記事

[edit]

CM: 2
TB: 0

page top

メーカーが明かしたPSPの性能表には、PSPに使われているCPUの型番と動作クロック周波数も書かれています。
PSPの性能(過去記事)


必読の資料
第4回 CPU・MPUはどうやって動く? ~ 発振器のナゾ - @IT MONOist
クロック周波数とは?
バスクロックとは? 意味・解説

エミュレータでは実行速度を上げる為に、CPUクロック周波数を333MHzなどに上げる処理がみられますね。

PSP の 333MHz駆動は、長時間持続させるとCPUが壊れる可能性がかなり高いです。危険なので、333MHz駆動をさせる場合は気をつけて下さい

CPUクロック周波数について補足
 CPUが、一番速く処理できる命令(何もしない命令:NOP とか)を 1秒間に何回実行できるかの回数。単位はHz(ヘルツ)。
 1つの機械語命令の、処理開始から処理終了までの実行にかかる時間は クロックという単位で表され、2~3クロック程度の速い命令から 10~30クロックくらい(またはそれ以上)かかる遅い命令などもあります。
 一般に、CPU内部では 掛け算命令は足し算の繰り返しで計算して求められるので 他の命令より処理速度は
遅いのです。
 PSPは、222MHz駆動なので、最速 222百万回/秒 の命令を実行できる、という計算上での話。
 もちろん、値が大きいと処理速度が速い、という事です。


一般に、バスクロックに与えるクロック周波数は、CPUに与えたクロック周波数の半分の値です。
PSPでも、CPUのクロック周波数を半分にした値をバスクロックに設定すればいいのです。


DXライブラリPortable で記述する場合 このソースコードはBSDライセンス
#include <dxlibp.h>
// CPU動作クロック周波数を変更
int freq, old_freq;

freq = 266;
old_freq = ChangeCpuSpeed(freq);
パラメータ:内部PLL&CPUクロック共用、バスクロックには1/2の値が入る
      クロック設定する前に、1 ~ 333 の範囲か調べています
     (内部PLLは、19 ~ 333 なので修正した方がいいと思います)

  返り値:直前のCPUクロック周波数 数値



CPUの動作クロック周波数を下げると、消費電力が抑えられますので、PSP Homebrew の mp3プレイヤー などではCPU動作クロック数を下げる処理がされていて、標準で5時間駆動のPSPが9時間駆動とかになるのは この為です。

ちょっと裏技とか
PSP Revolution では 222MHz と 333MHz での切り替えしかありませんが、CWC(チートプラグイン)を使えば 300MHz駆動とか可能になりますよ~


パソコンのCPUクロック周波数についての一覧表は、こっちを見て下さい。


関連記事

[edit]

CM: 0
TB: 0

page top

現在時刻の取得 DXライブラリPortable 

2010/07/18
Sun. 20:54

今回は、PSPの現在時刻を取得する手順について解説します


DXライブラリPortable

#include <dxlibp.h>
int GetDateTime ( DATEDATA *datebuf );
基本は、上記関数を呼ぶだけです。
そしたら、DATEDATA構造体で定義した datebuf に、現在の 日付&時刻 が取得される様です

では、DATEDATA構造体を調べてみましょう
"dxlibp.h"というファイルに定義が書いてあります

DATEDATA構造体 は、こんな風に定義されています
typedef struct DATEDATA__
{
int Year; // 年
int Mon; // 月
int Day; // 日
int Hour; // 時
int Min; // 分
int Sec; // 秒
}DATEDATA;

int なので、32Bit長ですね。
int なので、負の値が返ってくる可能性がありますよ?(ありえないとは思うけどなw)


DXライブラリPortableには、この他に、
ミリ秒単位(=1/1000秒)の精度を持つカウンタの現在値を得る(本家互換)関数や、
int GetNowCount ( void );

マイクロ秒単位(=1/1000000秒)の精度を持つカウンタの現在値を得る(本家互換)関数もあります。
u64 GetNowHiPerformanceCount ( void );





これらの関数を使って「カレンダー&時計」のアプリが作れそうですね



関連記事

[edit]

CM: 3
TB: 0

page top




憂煉氏の新ライブラリ製作中の実験動画です
憂煉氏ががんばってくれています。C++版 DXライブラリPortable のリリースが待ち遠しいぞ!

ボクはねんどろいど風のMikuMikuDanceモデルを使って何かを開発中。

ボクの場合、Windows7 32Bit Ultimate で MikuMikuDance をするには、Windows2000互換モードにして「管理者モードで起動する」のチェックを入れなければ起動しました。


毎日少しずつ書き物をする時間を作って記事を製作してますが、読みやすい分かりやすい文章は苦労します
みくねぎっと乙。の開発講座はちゃんとやりますので見捨てないでね

今週中に1ページ追加したいですが

関連記事

[edit]

CM: 0
TB: 0

page top

『千早が765衣装で吹っ切れた!? PSP』





● ご挨拶 ●
ポリゴンでなくて26枚のセルでパラパラまんがをやっています
PSPでアニメーションをやってみたいな、と思い、実現しました♪

本日より いよいよ配布開始でっす
関連記事

[edit]

CM: 0
TB: 0

page top


h o m e | n e x t  »


 

2019-10