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デスクトップ ドドド v0.1』 お試し版 の プログラムの解説です。

ソース&実行ファイルは、以下にあるので欲しい人はダウンロードしてチョ。
>> PSPプログラミング 『 PSPデスクトップ ドドド v0.1』 お試し版 リリース


処理の流れを簡単に述べますと、画面を深緑色に塗りつぶしてから、「ドドド」を書きまくっているのです。

では、詳しく解説します。

> //  関数の宣言をする
> int main(int argc,char *argv[]); // メイン
> void disp_DoDoDo(void); // ドドドのサブルーチン
> void Draw_Do(void); // 「ド」を書くサブルーチン
> int _rand(void); // 乱数生成サブルーチン

   ↑↑↑↑↑
この部分ですが、今まで記述しなかったのです。
CやC++では、使用する関数は、宣言をしてから書くのですが、使用している関数(サブルーチン)を、使われる逆順に ソースに記述してゆくと、関数の宣言をしなくても良い(省略できる)ので、今まで書かなかったのです。
今まで読みにくいプログラムを書いていてゴメンナサイ………。

//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//■ メイン
//■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■

int main(int argc,char *argv[])
{
   XVISetHOMEbutton();
// [HOME]ボタンのコールバック , [HOME]ボタンで終了可能
この関数の本体は、XVIpg.c に記述しています(見やすいように配慮)。
以降、【 [ HOME ] ボタンで終了を可能にする処理 】は、この関数で設定する事にします。

   XVIScrnInit(); // Gu初期化
この関数の本体も、XVIpg.c に記述してあります。
内容は、画面の初期化と 32ビットカラーモード に設定している、など、です。

   XVIScreenFrame(1,0); // 表示画面と描画画面を同じにする , XVIpg.c にあります
                 // 今回は、画面フレームは一つのみ、です
表示されている画面に落書きをするので、描画するフレームと表示するフレームを同じ(1枚のみ)にしています。

   disp_DoDoDo(); // PSP画面に「ドドド」描画 / 抜けるにはRトリガー押し
この関数を呼び出すと、Rトリガーが押されるまで、画面上に「ドドド」が落書きされ続けます(笑)。

   return 0; // この return命令 は実行されませんが、念の為に記述してあります。
}
何故 記述しているかというと、main の返り値を、int キャスト にしている為です。
int なので return 1 とか何か値を返す記述をしないと、コンパイル時に WARNING(警告) か、エラーのドッチか が出ます


/*****************************************************************************
* サブルーチン ドドドを書く&Rトリガー判定
*****************************************************************************/

void disp_DoDoDo(void)
{

   (略)
       Draw_Do();    //  'ド'を一文字 描画
この関数にて、ようやく一文字の「ド」が描画されます。

        XVIWaitVn(6);   // 6/60秒 = 0.1秒ほど 待ちます
PSPの画面に色々書いて速攻で表示させるプログラムを作ると、画面がチラつきますね?
チラつく理由は、画面表示のタイミングがとれていないからです。

テレビやパソコンの画面やPSPの液晶画面は、1/60秒ごとに1回、更新されます。その際、垂直同期信号という信号が発生します。
垂直同期信号というのを待つとタイミングがとれますので、垂直同期信号を待ってから画面を切り替えるとチラつかずに画面が切り替わります。

更に、垂直同期信号を一回待つと、1/60秒待たされるので、ここでは6回待って 6/60秒 = 0.1秒の待ちをしています。

       XVIreadpad(); // ← パッド状態取得 , XVIpg.c にあります
この関数は、NesterJ のソースから拝借しました。けっこう使えますよ。

     if((now_pad & PSP_CTRL_CROSS) != 0) // もし×ボタンが押されたら
        XVIFillvram(DARKGREEN);    // 深緑色でPSP画面を塗りつぶし
この条件文は、マスターして下さい。各種ボタンの値は、mydef.h に書いておいたような?

   do
   {
       XVIreadpad();
   }while((now_pad & PSP_CTRL_RTRIGGER) == 0);
// Rトリガーが押されるまでループ
こういうループも覚えておくと便利ですよ。

   XVIFillvram(BLACK);  // 黒色でPSP画面を塗りつぶし
   XVIScreenFlipV();    // PSP画面表示
}
この辺はテキトーに(笑)。

/*****************************************************************************
* サブルーチン 「ド」を描く
*****************************************************************************/

void Draw_Do(void)
{
   int x,y,color_Do;
 // 使用する変数の定義

   color_Do = ((int)(_rand() % 256)<<16)|((int)(rand() % 256)<<8)|((int)(rand() % 256));
「ド」を書く文字の色を、乱数を使って設定しています。乱数については 下の方 参照の事。
乱数を256で割った余り(8ビット長)を R、G、B の値にして、24ビットカラーに変換して設定しています。

   color_Do &= 0xFFFFFF;
念の為に、シモ 24ビットカラー の値にしています(32ビット値の 上位8ビットをカット)

   x=(int)(_rand()%453)+20; //  この数値は適当につけました。今後変更の予定
   y=(int)(_rand()%235)+20; // この数値は適当につけました。今後変更の予定
「ド」を描画する位置をランダムにする為に、乱数を使います。座標(x,y)

   if(x<5) x=10;   // この辺は
   if(x>460) x=450; // 念の為に
   if(y<12)  y=18;  // 記述して
   if(y>250) y=240; // いるのさっ
画面からの はみ出しチェック(笑)。

   XVISetTextBGcolor(COLOR_TOUMEI);  // 文字の背景色を透明にします
初登場関数。全角文字表示ライブラリに追加した関数です。描画する文字の背景の色を設定する関数です。以前は、mh_print( ); の色2パラメータで指定していましたね。

   XVIprint( x ,y ,"┣",color_Do);    // ドの ト 部分
   XVIprint( x+8,y-6,"‥",color_Do);  // ドの 点々部分
}
「ド」を構成する文字。合わせる調整がめんどかったwwww

/*****************************************************************************
* サブルーチン 乱数生成
*****************************************************************************/

int _rand(void)
// ここで新しく、乱数を使います。乱数とは予想できない不規則な数値の事。
// でたらめな数値が欲しい時に使用します。
// _rand()を呼び出すたびに、色んな数値を返してきます。
{
この関数は、PSPにて乱数を生成する為のアルゴリズムを採用しています。
PSPSDK にある乱数 rand( ); は、float キャストでして、intキャストに変換出来なかったようなので、記述して使用しています。

   int xf; // 乱数更新用の変数
   rnd_seed+=xf+sceKernelLibcTime((void *) 0);
どうやら、PSPの時刻を参照して、乱数をいじるようだ。

   xf = rnd_seed / 45309;  // ← この数値が乱数生成に重要な役割です(テキトーな値だが)
割り算ですね。この【 割る値 】によって、ナイスな乱数になったり、チョンボな乱数になったりします。

   return xf;
}

はい、返り値は 32ビット長の乱数 です!



何か質問とかありましたら、カキコするがよろし。

つ……、疲れた…………。

ソース&実行ファイルは、以下にあるので欲しい人はダウンロードしてチョ。
>> PSPプログラミング 『 PSPデスクトップ ドドド v0.1』 お試し版 リリース


【 関連記事 】
PSPプログラミング 『 PSPデスクトップ ドドド v0.1』 お試し版 リリース
PSPプログラミング 『 PSPデスクトップ ドドド v0.1』 お試し版 ソース解説
今、つくりかけのん………PSPデスクトップ ドドド 改
PSP Homebrew : 『PSPデスクトップ ドドド 改』 何気にリリース

関連記事
スポンサーサイト

[edit]

CM: 0
TB: 0

page top

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

page top

コメントの投稿

Secret

page top

トラックバック

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

page top


h o m e |


 

2017-05