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

ICON3.png
ICON3.png


『ハローワールド!ひねくれ版』を作ったので、ご報告です。

これは、" Hello, World ! " とかを表示させます。
無限ループで、パッド情報を調べています。
もし、Rトリガーボタンが押されたら、即座に終了してXMBへ戻ってきます。
もちろん、[HOME]ボタンからでも終了可能ですよん。
な、何て親切なんだ(笑)。

全部まとめてココに! ↓↓
ダウンロード
PSP_HELLO_hinekure.zip


「Hello, world」は、エミュレーターとかを起動可能にするソフトウェアではないので勘違いしないで下さいね。
Hello world - ウィキペディア


[ インストール方法 ]

FW 1.00 の人 → /HELLO/ フォルダーを、ms0:/PSP/GAME/ 以下フォルダーへコピーする。

FW 1.50 の人 → /HELLO/ フォルダーをPBPmakerやEasyPBP InstallerやKxploit等で分割して、
         ms0:/PSP/GAME/ 以下フォルダーへコピーする。

CFW PSP-1000 の人 → /HELLO/ フォルダーを、ms0:/PSP/GAME150/ 以下フォルダーへコピーする。

CFW PSP-2000 の人 → /HELLO/ フォルダーを、ms0:/PSP/GAME/ 以下フォルダーへコピーする。

以下、プログラム・ソースとか(文中の、緑色の文字注釈なので読み飛ばしOK!
------------------------------------------------------------------------
ファイル名 == main.c
------------------------------------------------------------------------

/////////////////////////////////////////////////////////////
//                             //
// HELLO, World arranged. //
// //
// Created by : 猫山 猫宗 in 2009/03/08(SUN) //
// //
/////////////////////////////////////////////////////////////


// ココからは、インクルード部分ですよ~~♪
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspdisplay.h>
#include <pspctrl.h>

#include <pspsdk.h>
#include <pspkernel.h>
#include <stdio.h>

#include <pspctrl.h>
#include <stdlib.h>
// インクルード部分お終い~~♪


// モジュール名を設定する。
PSP_MODULE_INFO("HELLO", 0, 1, 1);
// スレッドの情報を設定する。
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

// #define は、「定義する」という意味です。
// 'pspDebugScreenPrintf' と書くと長いので、'printf' に省略します。

#define printf pspDebugScreenPrintf


///////////////////////////////////////////////////////////////////
// ↓↓  ココから、[HOME]ボタン押しで終了できるように記述します。


// Exit callback コールバックの終了
int exitCallback(int arg1, int arg2, void *common)
{
sceKernelExitGame();
return 0;
}

// Callback thread コールバックスレッド
int callbackThread(SceSize args, void *argp)
{
int cbid;

cbid = sceKernelCreateCallback("Exit Callback", (void*) exitCallback, NULL);
sceKernelRegisterExitCallback(cbid);

// ポーリング
sceKernelSleepThreadCB();

return 0;
}

// コールバックスレッドの生成
int setupCallbacks(void)
{
int thid = 0;

thid = sceKernelCreateThread("update_thread", callbackThread, 0x11, 0xFA0, 0, 0);
if (thid >= 0)
{
sceKernelStartThread(thid, 0, 0);
}
return thid;
}

//// お疲れ~♪ ↑↑ ここまで書いたら、[HOME]ボタンで終了できます
///////////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////////
// //
//   いやほう!メイン関数でーーす!ここから始まります //
// //
/////////////////////////////////////////////////////////////////


int main(void)
{
SceCtrlData pad; // 構造体変数 pad に、パッド入力情報が入る。


pspDebugScreenInit(); // 画面を初期化する
setupCallbacks(); // [HOME]ボタン押しでXMBに戻れる様に設定

sceCtrlSetSamplingCycle(0); // パッド情報を読み込むために、まず行ないます
sceDisplayWaitVblankStart(); // 画面表示の垂直同期信号待ちをします(チラつき防止)

pspDebugScreenInit(); // 画面を初期化する

printf(" Hello, world !!\n\n"); // 画面に書く( \n は、改行文字です )
printf(" Hello, Ludorph !!\n\n"); // 画面に書く(つまり、2行、改行する)
printf(" Hello, kitty !!\n\n"); // 画面に書く
printf("\n Press R button to EXIT."); // 画面に書く( Rトリガーボタンを押せ! )

do
{
// ↓↓ PSPのパッド情報読み取り作業
sceCtrlReadBufferPositive(&pad, 1);
}while(pad.Buttons != PSP_CTRL_RTRIGGER); // Rトリガー押されない限り、無限ループよん
// 一応、[HOME]キーからでも終了できますので。

sceKernelExitGame(); // PSPのゲームを終了させる関数(XMBに戻ります)
return 1; // ダミーですが、書いてみたり。
}

------------------------------------------------------------------------
↓↓ makefile です
------------------------------------------------------------------------

TARGET = HELLO
OBJS = main.o

INCDIR = lib/
CFLAGS = -Wall -G0 -O2 -fomit-frame-pointer -mgp32 -mlong32

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

LIBDIR =
LDFLAGS =
LIBS = -lpspgu -lpsppower

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = HELLO, World Arranged.
PSP_EBOOT_ICON = ICON3.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

main.o : main.c

------------------------------------------------------------------------

付属の !_mk.bat をダブルクリックでコンパイル開始です。
コンパイルが終ったら、FW 1.00用の EBOOT.PBP が生成されます。

次回は、全角文字版の『 はろぅ わーるど for PSP 』 を製作&掲載します。
皆さん、mediumgauge様に感謝して全角文字ライブラリが含まれている、PSP用rar展開サンプルプログラム(RAR extract sample for PSP)をダウンロードさせて頂きましょう(#^.^#)

スポンサーサイト

[edit]

CM: 0
TB: 0

page top

     HELLO2.png →  HELLO2.png

アイコンのスクリーンショット
クロスメディアバーの [ゲーム] から見たトコロ。

実行画面のスクリーンショット1
かなーーーり乱文ですが、ご了承下さい。ヘコヘコ。m(_ _)m

実行画面のスクリーンショット2
下側の5行の文字列が、明るくなったり暗くなったりします。
Rトリガー押しで一発終了!




謝辞

このプログラムを作るにあたり、ミディアムゲージ様 製作の『全角文字表示ライブラリ』を、一部改変して使用しております。ソースのコンパイルには、『全角文字表示ライブラリ』が必須です。

ミディアムゲージ様に感謝です。

【 注意 】
2010年01月10日 現在、『全角文字表示ライブラリ』は配布停止中です。
理由は、心無いユーザーによる無断使用のため、です。なんてこったい!


ファームウェア1.00/カスタム・ファームウェア完全対応してます!!
もちろん、カーネル1.00版と、カーネル3.xx版があります。
for PSP-1000 / for PSP-2000

Q. ソースは?
A. 付属しています(付属しないと駄目じゃん!!)


ダウンロードページへご案内~

解説は、また、後ほど………イソイソイソ……。

[edit]

CM: 6
TB: 0

page top

さて、前出の 「全角文字版はろ~わーるど」 の解説です。
大した事はしていません。

本家 『 全角文字表示ライブラリ zenkaku.c 』 への変更は、下記の通りです。
文字の描画色のキャスト(型宣言)を、"int"から"long"に変更しただけです。

理由は、
ただの気まぐれです。気まぐれオレンジロード(古っwww
「C++コンパイラーは、CPUやコンパイラーに渡すパラメータ等で int の扱いが変化する為」です。
PSPは32BIT-CPUですし、色の表現は32Bit可能ですし、ソースを見ていたら32Bitで扱われている事などから、"long"に統一しました。

昔ながらのプログラマーは、int は2バイトって固定観念があるんですよ。PSPは32ビットCPUを装備してるので、int は4バイト(固定)なのですが…。

で、文字の描画処理は、フォントの有効データがあれば、指定された色で点を打ち、フォントの有効データが無ければ何もしない、という事が行なわれています(擬似透明処理)。
空白文字だと全く点が打たれません。"●"という文字だと円状に点が打たれます。

こういう処理をしていると、暗い色で文字列を描画して、左上に(-1,-1)した座標から明るめの色で文字列を描画し、『立体感が出ている影つきの文字列』が描画できます。

私は、『 全角文字表示ライブラリ zenkaku.c 』を更に改良して、文字色を透明に出来るようにしたり、背景色を有効(32Bitカラー)にする事も考えています。
そうするとカラフルな文字が描画できて楽しいのでは?とか思ったり。

関数 mh_print のフォントについて
書体は東雲フォント(しののめふぉんと)です。
半角文字では横6ピクセル×縦12ピクセル
全角文字では横12ピクセル×縦12ピクセル
となっております。
Windows文字を全てサポートし、更に絵文字も入っています。

関数 mh_print の使い方
/*****************************************************************************
*文字列の描画
*****************************************************************************/

void mh_print(int x,int y,const char *str,long col)

int x == 描画始点のX座標(左端 / 0~479の範囲で指定:PSP横は480ピクセル)
int y == 描画始点のY座標(上端 / 0~271の範囲で指定:PSP縦は272ピクセル)
const char *str == 描画する文字列のオフセット値(アドレス:32Bitの値で指定)
long col == 描画する文字列の色を32Bitカラーで指定(実は24Bitカラー)

<使用例>
mh_print(32, 27, "Hello,world !",0xffffff); // 白色


尚、PSPでの32Bitカラーは、下記のようになっています。

( 上位 Bit  ←←←←←←←←←←    →→→→→→→→→→ 下位 Bit )
無無無無無無無無 青青青青青青青青 緑緑緑緑緑緑緑緑 赤赤赤赤赤赤赤赤

簡単に述べると、無青緑赤の順に、各色成分が 8 Bit 持っています。
Windowsでは、無赤緑青なので、PSPとは 青成分と赤成分が逆になっている、という事実。

8 Bit という事は、0~255 の 256通り の表現が可能という事です。
0 は無色で、255 は最大に明るい色、です。
C++言語での色表現を下記に書いてみました。C++言語では16進数を 0x数値 と書きます

< 例 >
青色:0x00FF0000
赤色:0x000000FF
緑色:0x0000FF00
紫色:0x00FF00FF
黄色:0x0000FFFF
水色:0x00FFFF00
黒色:0x00000000
灰色:0x00777777

32Bitカラーといっても、実際は24Bitカラーなんですねぇ。

この関数に対して不明点・質問があったら、コメント欄に書いてください。解かる範囲でお答えします。

[edit]

CM: 1
TB: 0

page top

全角文字表示ライブラリの解析。

ビットマップ描画の解説の前にやっておくべき事でした。ごめんなさい。

  ( プログラムの一部を見たい人の為に、「続きを読む」 に追加しました 。 7/14 )

まず、東雲フォント(しののめふぉんと)の文字を全部表示するプログラムの公開から始めます。
実行してみて、絵文字が存在する事を確認しました。ナイス!

図1  絵文字 その1 は、コード : 0xF89F to 0xF8FC にかけて存在。
絵文字 その1

図2  絵文字 その2 は、コード : 0xF940 to 0xF97E と、コード : 0xF980 to 0xF9FC にかけて存在。
絵文字 その2

図3  EU文字 なども存在します。
EU文字とか。


こういう絵文字などを表示させたい場合は、下記のように記述すると可能です。

例:自動車(コード=0xF8C0)、おにぎり(コード=0xF9EE)

       mh_print( x, y, "\xF8\xC0 \xF9\xEE", colo1, col2);

「自動車」の絵文字のコードは、0xF8C0 なので、"\xF8\xC0"が本体。
「おにぎり」の絵文字のコードは、0xF9EE なので、"\xF9\xEE"が本体。




『東雲フォント文字を全部表示しちゃうプログラム』のダウンロード
ALL_Shinonome_Moji.zip  309 KB (316,475 バイト)
ダウンロード
ソース付き / 実行ファイル付き / PSP-1000&PSP-2000対応)
(ソースのコンパイルには、全角文字表示ライブラリが必要)
ユーザーモードのEBOOT.PBPです
暗号化はしてないので、正規PSPでは実行不可能!(ぐは


今回のプログラムは手抜き作成です、ごめんなさい。

プログラムの一部を見たい人の為に、「続きを読む」 に追加しました。


【 関連記事 】
PSPプログラミング 全角文字表示ライブラリをダウンロード
PSPプログラミング [ 番外編 ] 日本語の文字 一覧表(ASCII & SHIFT-JIS) 完全版
PSPプログラミング 東雲フォント文字を全部表示しちゃうプログラム
PSPプログラミング 東雲フォントのデータ構造を調べました
PSPプログラミング 全角文字表示ライブラリ公開停止中のお知らせ
PSPプログラミング 『東雲フォント』が動画になった

-- 続きを読む --

[edit]

CM: 8
TB: 0

page top

PSPプログラミング AA(アスキーアート)を考察 

2009/07/15
Wed. 08:14

【アスキーアート】
                            やつを追う前に言っておくッ!
                    おれは今やつのスタンドをほんのちょっぴりだが体験した
                  い…いや…体験したというよりはまったく理解を超えていたのだが……
         ,. -‐'''''""¨¨¨ヽ
         (.___,,,... -ァァフ|          あ…ありのまま 今 起こった事を話すぜ!
          |i i|    }! }} //|
         |l、{   j} /,,ィ//|       『おれは奴の前で階段を登っていたと
        i|:!ヾ、_ノ/ u {:}//ヘ        思ったらいつのまにか降りていた』
        |リ u' }  ,ノ _,!V,ハ |
       /´fト、_{ル{,ィ'eラ , タ人        な… 何を言ってるのか わからねーと思うが
     /'   ヾ|宀| {´,)⌒`/ |<ヽトiゝ        おれも何をされたのかわからなかった…
    ,゙  / )ヽ iLレ  u' | | ヾlトハ〉
     |/_/  ハ !ニ⊇ '/:}  V:::::ヽ        頭がどうにかなりそうだった…
    // 二二二7'T'' /u' __ /:::::::/`ヽ
   /'´r -―一ァ‐゙T´ '"´ /::::/-‐  \    催眠術だとか超スピードだとか
   / //   广¨´  /'   /:::::/´ ̄`ヽ ⌒ヽ    そんなチャチなもんじゃあ 断じてねえ
  ノ ' /  ノ:::::`ー-、___/::::://       ヽ  }
_/`丶 /:::::::::::::::::::::::::: ̄`ー-{:::...       イ  もっと恐ろしいものの片鱗を味わったぜ…

【 イラスト 】
Porunaref.png

いきなり何ですか?あなた2ちゃんねらーですか?と突っ込まれるような、有名なAA(アスキーアート)を貼り付けてみました。

全角文字表示ライブラリは、半角文字=よこ:6ピクセル×高さ:12ピクセル、全角文字=よこ:12ピクセル×高さ:12ピクセル、
の構成で、等倍フォントなので、AA作成には不向きです。

しかし、等倍フォントでもAAは出来るのです。
以下。



      Жж
       |
       |<)゜] ョ)))))))))))))) ))))))) 彡
       |
       |
       |<)゜] ョ))))))))) )))) ミ
       |
       |
       |< ))] ミミミミミミ 丶        彡彡
       |            ゞミ彡彡彡彡彡
       |
       | ____
  __   |/    \_
     \/|       \
      \|        \        ===============○
       |         \      ∠∠∠∠∠∠∠∠∠∠∠∠∠∠∠/ \\
       |                ∠∠∠∠∠∠∠∠∠∠∠∠∠∠∠/   \\
       |              ∠∠∠∠∠∠∠∠∠∠∠∠∠∠∠/     |\
       |               |             |      |



お題を付けるなら、『鯉のぼりのある風景』でしょうか。

全角文字表示ライブラリでは、こういう文字のアートが可能なのです。
更に、文字の描画位置は、よこ:6ピクセル単位、高さ:12ピクセル単位、でなくて、PSP画面(0,0)-(479,271) の範囲で自由に文字を描画できますから、固定文字枠ではない、という事です。
1ピクセル単位での描画座標の位置指定が可能なので、文字を重ねての描画も出来る。

↓↓ こんな描画が可能
DODODO.png
どうです?吹きましたか? 名付けて、「デスクトップ ドドド!」ジョジョネタ分かる人、限定。

ソースは書かなくても、想像できるっしょ。(^^;;;;;;;
次は、この「デスクトップ ドドド!」プログラムを作ってみる事にします。

[edit]

CM: 0
TB: 0

page top

2012 06-10 新アップローダーに引越しました。
7/17(金) [ 続きを読む ] に、ソースコード(一部抜粋)を追加しました。
7/18(土) 今まで、プログラムの流れが下から上、という解かり難いモノだったので、上から下へ変更しました。


さて、役に立たないゲームプログラミング初作品として、ここに『 PSPデスクトップ ドドド v0.1』 お試し版をリリースしますwwwww

うん、役に立たないソフトウェアなんだ。ジョジョウェアですが?

まずは実行画面のスクリーンショットからどうぞ。
DoDoDo_v01_SS.png

なにが起こっているか説明すると、PSP画面(デスクトップ)に、めちゃくちゃに『ド』が書き込まれる、というシロモノ。だって、ジョジョウェアだし。(^^;;;;


遊び方
1.PSP Desktop DoDoDo v0.1 のゲームアイコンを起動させます。
2.すると、画面が深緑色に塗りつぶされ、「ド」が うごめきまわります。
3.×ボタンを押すと、画面が深緑色に塗りつぶされます(リフレッシュ)。
4.終了したい場合は、Rトリガー押しで一発終了できます。
5.HOMEボタンからでも終了できます。


その他については、付属テキスト(!!_読んでね.txt)を参照してください。

このソフトウェアは、近日中にヴァージョンアップ予定です。
 ・ ジョジョのPSP壁紙が付きますwwww
 ・ 「ド」が更に ジョジョ風になります。




ソースの解説は、以下の記事で行なっています。
PSPプログラミング 『 PSPデスクトップ ドドド v0.1』 お試し版 ソース解説



『 PSPデスクトップ ドドド v0.1』 お試し版 のダウンロード
DoDoDo_v01.zip  270 KB (277,382 バイト)
ダウンロード
ソース付き / 実行ファイル付き
(ソースのコンパイルには、全角文字表示ライブラリが必要)
PSP-1000&PSP-2000&PSP-3000[HEN必須] 対応
ユーザーモードのEBOOT.PBPです。
正規PSPでは Half-Byte Loader で実行可能!




( 全角文字表示ライブラリを、勝手に改造中………。 )
   今後、XVIprint関数が %s とか %d とか %X とかにも対応するかも(^^;;;

【 関数名を大きく変更しました 】
  → DXライブラリPortable との共存が可能です!

【 背景色設定用の関数を新しく用意しました 】
  → XVISetTextBGcolor( ); という関数で、文字の背景色を指定可能。
  → mh_print( )関数のパラメータの数は、標準のモノと同じです。

【 mh_print関数の機能を拡張したので関数名を変更しました 】
  → XVIprint( ); と改名しました。
  → 文字の色のキャストを、int へ戻しました。
  → 垂直同期待ち処理の際の、フレーム設定のバグを修正しました。


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

-- 続きを読む --

[edit]

CM: 0
TB: 0

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

もうお目見えしないであろうと思っていた「全角文字表示ライブラリ」ですが、Mediumgauge氏が先日、「PSP用rar展開サンプルプログラム」に「全角文字表示ライブラリ」を添えて公開して下さいました

ダウンロード
>> PSP filer version6.6
>> http://www.geocities.jp/mediumgauge/

こっちが本家みたいです(WinRAR)
>> RARLAB
>> http://www.rarlab.com/


即 試せる実行ファイルが付属しています

皆さんも、研究用に どぞん♪
…ヨカッタ、ヨカッタ

[edit]

CM: 0
TB: 0

page top

二択ゲームを作ろうとしたら、先に終了ダイアログを作っておいたほうがいいと思ったので、まずこれを。

ダイアログについては、こちらをおさらいして下さい

PSPでは、ゲーム中に HOMEキーを押すと 「ゲームを終了しますか?」と質問され 「はい」「と「いいえ」の選択肢から選ぶ事ができますね

NesterJ でも、メニューから終了を選ぶと 「Are you sure to EXIT to PSP menu ?」と質問され 「OK」と「Cancel」の選択肢から選ぶ事ができますね

こんな風に、ゲームはボタン押しでいきなり終わらせてはダメ、という事ですね。終了前に、終了していいか質問してから終了、というのが良質なゲームのあり方だという事
その為の 「ダイアログ」という概念。

ダイアログの中身は 「選択肢から選んでもらい、どれを選んだか伝達する処理だけ」 です。
終了ダイアログの場合、「終了する」を選んだのか「終了しない」を選んだのかを伝えれば良いという事
「キャンセル」は、「終了しない」の意味と同等なので二択でいいのです

それでは終了ダイアログのフローチャートは、こんな具合



ちょっと変な構図になりましたが、分かってください(汗)

フローチャートを書くことにより、終了ダイアログのプログラムが書きやすくなりました

ソースコードをダウンロードする

[edit]

CM: 1
TB: 0

page top


h o m e |


 

2017-09