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

2011年6月10日更新
元の日付・時刻(2010/10/15 20:12:32)

小さいファイルサイズでの公式PSP対応化が実現!!!

◎この自作ゲームは圧縮署名化ツールで公式PSPでも遊べるようになっています



『千早が765衣装で吹っ切れた!? PSP』 公式PSP対応版リリース




● ご挨拶 ●
作者の猫山猫宗と申します
ポリゴンでなくて26枚のセルでパラパラまんがをやっています
PSPでアニメーションをやってみたいな、と思い、実現しました♪
署名ツールで署名してあるので正規PSPでも起動&動作可能ですお!
公式PSPでの起動&動作が可能です


◆ 対応PSP ◆
・システムソフトウェア2.80以上の公式PSP
・自作ソフトを起動可能なPSP(カスタムファームウェアやHENなど)
・ユーザーモードのソフトウェアなので、3.XX以降カーネルモード必須
・プラグインは全部OFFで!

◆ 未対応PSP ◆
・カーネルモード(1.50Kernel)になっているカスタムファームウェアのPSP
・Half-Byte Loader から起動した場合(MP3音声が出ません)
・システムソフトウェア2.80未満の公式PSP

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

[edit]

CM: 1
TB: 0

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です)

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

[edit]

CM: 4
TB: 0

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

2012/01/03更新

DXライブラリPortable v0.5.7 の色コードが、あまりにも貧弱すぎなので勝手に作成w

ここでは、プログラムで使用できる PSP向けの色コードを紹介することにします
尚、この表はどんどん更新します
ダウンロードリンクをご利用下さい

ライセンスはBSDライセンスです。自由にお使いください。

転載される方は、ちゃんと「転載です」って書いてくださいね

色コード表☆バージョン1.21


HTMLによる色付きの表とDXライブラリPortable v0.5.7用並びに OldSchoolLibrary v1.x.x用のヘッダファイル
使い方も書いてあります


/***************************************************************************
* 32ビット色コード for PSP DXライブラリPortable v0.5.7 *
* 32ビット色コード for PSP Old School Library v1.x.x *
***************************************************************************/

// 基本の20色
#define XVI_COLOR_BLACK 0xFF000000 // 黒色   ■■■■■■■■
#define XVI_COLOR_BLUE 0xFFFF0000 // 青色   ■■■■■■■■
#define XVI_COLOR_RED 0xFF0000FF // 赤色   ■■■■■■■■
#define XVI_COLOR_GREEN 0xFF00FF00 // 緑色   ■■■■■■■■
#define XVI_COLOR_DARKBLUE 0xFF800000 // 紺色   ■■■■■■■■
#define XVI_COLOR_MARINBLUE 0xFFFA0000 // 水色   ■■■■■■■■
#define XVI_COLOR_BROWN 0xFF404080 // 茶色   ■■■■■■■■
#define XVI_COLOR_PINK 0xFFFF80FF // 桃色   ■■■■■■■■
#define XVI_COLOR_DARKGREEN 0xFF008000 // 深緑色  ■■■■■■■■
#define XVI_COLOR_YELLOGREEN 0xFF00FF80 // 黄緑色  ■■■■■■■■
#define XVI_COLOR_PURPLE 0xFFFF0080 // 紫色   ■■■■■■■■
#define XVI_COLOR_ORANGE 0xFF4080FF // 橙色   ■■■■■■■■
#define XVI_COLOR_LEMON 0xFF80FFFF // レモン色 ■■■■■■■■
#define XVI_COLOR_YELLOW 0xFF00FFFF // 黄色   ■■■■■■■■
#define XVI_COLOR_SKYBLUE 0xFFFFFF00 // 空色   ■■■■■■■■
#define XVI_COLOR_PEARLORANGE 0xFF75BAFF // 肌色   ■■■■■■■■
#define XVI_COLOR_GRAY 0xFF808080 // 灰色   ■■■■■■■■
#define XVI_COLOR_SILVER 0xFFC0C0C0 // 銀色   ■■■■■■■■
#define XVI_COLOR_GOLD 0xFF20C0E6 // 金色   ■■■■■■■■
#define XVI_COLOR_WHITE 0xFFFFFFFF // 白色   □□□□□□□□

// ホームページデザインでよく利用されている色(アルファベット順)
この下は、HTML用の色コードを全部PSP用に移植した、という暇人ぷりです

ありか
PSP xvi のろだにあげてあるので欲しい人は取りに行ってください

関連記事

[edit]

CM: 0
TB: 0

page top

2011年6月13日更新

どうやら、現在の6.20HEN(TN-B)ではイントラフォントで利用しているAPIの解析が不十分らしくて、S-JISでの日本語文字描画が出来ません
↑↑ なんだか、システムソフトウェア6.xx以降では S-JIS文字を廃止してUNICODE文字のみを使用するように変更になった可能性がありますよ?つまり、UTF-8文字コード・オンリー
6_20HEN_TN-B.jpg

UTF-8 での日本語文字の描画は出来るので、DXライブラリPortable v0.5.7 でイントラフォントによる文字描画を行ないたい場合、DXライブラリPortable v0.5.7 を少々改造する必要があります


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

改造箇所
1.
/font/ フォルダの font.c の 18行目

>  dxpFontArray[0].pif = intraFontLoad(DXP_FONTNAME_DEFAULT,INTRAFONT_STRING_SJIS);

"INTRAFONT_STRING_SJIS" を "INTRAFONT_STRING_UTF8" に書き換えてビルドして、出来る dxlibp.adxlibp_UTF8.a にリネームして PSPSDK の pspsdk/psp/sdk/DXP_v0.5.7/lib/ の中へ入れる

2.
Makefile の書き換え

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

3.
ソースコードの文字コードの変更
DXLib Portable v0.5.7 UTF-8版を利用するプログラムソースコードは、シフトJISでは無くてUTF-8コードでソースコードを上書き保存してください
UTF8保存


4.
以上の過程を実行してソースコードを再ビルドすると、イントラフォントを利用した文字描画が、システムソフトウェア6.xx系の 6.20HEN(TN-B) や Half-Byte Loader からでも通常通りに利用できます

5.注意事項
全角文字表示ライブラリを使用した文字の描画を行なうプログラムコードは シフトJISコードでないと文字化けしますので、UTF-8のソースコードとは別のファイルとして分割する必要があります


この記事で紹介している改造方法で製作した、DXライブラリPortable v0.5.7 UTF-8版 を配布しております
こっちをクリックで該当記事へ飛びます
 → PSPプログラミング DXLib Portable v0.5.7 UTF-8版 代理リリース!


ちとくのホームページ様にて、システムソフトウェア6.xx以降のPSPでも Shift_JIS コードでイントラフォントを利用可能にする方法が公開されています
>[資料]6.XX上のintraFont - PSPプログラミング
http://chitoku.symphonic-net.com/PSPPrograming/d05-intrafontsjis.html

関連記事

[edit]

CM: 11
TB: 0

page top

2011年05月13日 更新

DXライブラリPortable v0.5.7を使ってプログラムを書くときに使える雛形です.
これに肉付けをしてゆくと何かのプログラムになります.

あとは、「イラスト鑑賞アプリ」とか「千早が765衣装で吹っ切れた!?PSP」とかのソースコードを見て勉強していただければ何か作れるはずなのでがんばって下さい.

この雛形ソースコードでは無音の実行ファイルが作れます.
システムソフトウェア6.xx以降のPSPでは、扱える文字コードがUNICODEのみ みたいなので、DXライブラリPortable v0.5.7 UTF-8版を使用して文字描画をする事を推奨します


DXLib Portable v0.5.7 での雛形(ダウンロード)
DXLibP_HINAGATA02_zip.txt
拡張子を ZIP で保存&解凍して下さい.

前回からの変更点

「もじゅ~る・いんふぉ」をこの様に書くと うまくいったw↓↓
/*****************************************************************************
* もじゅ~る・いんふぉ / メインコードはユーザモード
*****************************************************************************/
PSP_MODULE_INFO("HINAGATA_DXP_02", PSP_MODULE_USER, 1, 0);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
PSP_HEAP_SIZE_KB(16*1024); // 新規追加
PSP_MAIN_THREAD_STACK_SIZE_KB(512); // 新規追加



PSPSDKに署名機能を追加するには、下記ページを参考にし下さい
>> 署名済みPSP自作ソフトの作り方 @プログラミングで
>> http://nekoyama2gillien.blog36.fc2.com/blog-entry-417.html


実際のソースコードは、続きに書いてあります


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

[edit]

CM: 10
TB: 0

page top

2011年5月18日更新

DXライブラリPortable の 開発元、憂煉さんにUTF-8版のリリースをお願いしたところ、忙しいので代理でリリースしてくださいと言われました

そんな訳で、猫山がソースコードを書き換えてビルドした DXライブラリPortable v0.5.7 UTF-8版 を配布開始します.
PSPSDKのバージョンは 最新版の 0.11.1 でビルドしてます.
猫山猫宗の名前は形式上書いていますが本家は憂煉さんですよ.



Q.これは何?
A.PSPのシステムソフトウェア6.xx以降では、文字コードがUnicodeのみ対応になったらしく、今まで使用できていた、シフトJIS日本語文字コードが利用できなくなりました。そこでDXライブラリPortableでのイントラフォント文字描画をUTF-8コードで文字描画するように改変したものが、このUTF-8版という事です


DXライブラリPortable v0.5.7 UTF-8版

ダウンロードしに行く
ソースコードも付属してます.

使い方
今まではシフトJIS文字コードで保存していたソースコードですが、これからは UTF-8文字コードで保存してからコンパイル&ビルドして下さい




パソコンへの導入方法はこちらを参考に
PSPプログラミング PSPSDKにライブラリを追加しよう(5)DXLibP v0.5.7 UTF8版

関連記事

[edit]

CM: 7
TB: 0

page top


http://www.nicovideo.jp/watch/sm14449799

はいはい、初歩のプログラミングですな
やっぱワイド大画面っていいわ~~(笑)
拡大コマ送りとかでも見れるしw

皆さん作ってると思いますが、基礎なので、このプログラムコードを配布します♪

こっちで配布



関連記事

[edit]

CM: 2
TB: 0

page top

このブログは初心者さんも利用しているので、「これは初歩だから出来るよね?」じゃなくて「初歩だから徹底して教えます」というスタイルにすべきだと考えを改めました

そんな訳で、PSPSDK版しかなかった"Hello,World."を、DXライブラリPortable版へ移植してみたプログラムソースコードを配布します。

ここからダウンロードして下さい(拡張子を ZIP で保存・解凍お願いします)
DxLibP_HelloWorld2.txt

うっかり著作権表記が抜けていたので、中身のファイルのタイムスタンプが 22:00:00 じゃ無いのをDLされた方は お手数ですが再度ダウンロードして下さいませ


実行結果はこんなの



解説はこっちでやっています→ここ

関連記事

[edit]

CM: 2
TB: 0

page top

DXライブラリPortable版 "Hello,World."の解説 

2011/05/30
Mon. 08:09

遅刻しました。ごめんなさい(^^;;;

では本題。
前回配布したソースコード全文を貼り付けます。

main.c


  1. // 正規PSP開発も可能 DXライブラリPortable v0.5.7 UTF-8版
  2. //
  3. // 「はろー、わーるど!」簡易プログラムコード
  4. //
  5. // イントラフォントはUTF8コードのみ、みたいです。シフトJISは廃止っぽい(?)
  6. //
  7. // これは BSDライセンスとします
  8.  
  9. #include <dxlibp.h>
  10. #include "COLORS.H"
  11.  
  12. /*****************************************************************************
  13. * 関数の登録
  14. *****************************************************************************/
  15. int main(int argc, char *argp[]);
  16. void action(void);
  17.  
  18. /*****************************************************************************
  19. * もじゅ~る・いんふぉ / メインコードはユーザモード
  20. *****************************************************************************/
  21. PSP_MODULE_INFO("HelloWORLD", PSP_MODULE_USER, 1, 0);
  22. PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
  23. PSP_HEAP_SIZE_KB(16*1024); // 新規追加
  24. PSP_MAIN_THREAD_STACK_SIZE_KB(512); // 新規追加
  25.  
  26. /*****************************************************************************
  27. * main
  28. *****************************************************************************/
  29. int main(int argc, char *argp[])
  30. {
  31.   DxLib_Init();
  32.  
  33.   ClearDrawScreen(); // 描画先のグラフィックスをクリアする
  34.   action(); // アクション(実際のメイン処理)
  35.  
  36.   DxLib_End();
  37.   return(0);
  38. }
  39.  
  40. /*****************************************************************************
  41. * アクション(実際のメイン処理)
  42. *****************************************************************************/
  43. void action(void)
  44. {
  45.   DrawString( 100, 64, "DXライブラリPortable版",     GREEN, BLACK);
  46.   DrawString( 64, 96, "HELLO,WORLD はろー、わーるど!", WHITE, BLACK);
  47.   DrawString( 140,180, "何か押すと終了。",        YELLOW, BLACK);
  48.   ScreenFlip(); // 表示
  49.  
  50.   do  {             // 何か押されるまでループします
  51.     ProcessMessage();      // パッド入力
  52.   }while(CheckHitKeyAll() == 0);
  53.  
  54.   return;
  55. }




DXライブラリPortableを使うので、以下のようにインクルード記述を書きます
>  #include <dxlibp.h>


では、main( )関数から解説を始めます。

>  DxLib_Init();
ライブラリでプログラム開始の初期化手続きをします。まず最初のお約束記述です。
実行すると、

・PSP画面が32ビット色モードで初期化される
・mp3音声の発声準備が行われる
・パッド入力のスタンバイが行われる
・イントラフォントライブラリで文字を書く準備が行われる

・・・などが実行されて、即、色んなプログラムコードを実行できる状態に待機されるのです。
なんて俺得命令なんだっ!って思いますよ(笑)
ホントは返り値を確認して、エラーだったらプログラムを終了しないといけないのですが、そういう事は滅多にないと勝手に判断してエラーの場合の処理記述を省略しています

>  ClearDrawScreen(); // 描画先のグラフィックスをクリアする
PSP画面を黒色で初期化します(黒色で塗りつぶし)

>  action(); // アクション(実際のメイン処理)
関数 action(); を呼び出します

>  DxLib_End();
>  return(0);
ライブラリでプログラム終了手続きをする、お決まりの記述です



次、action( )関数の方
大雑把に解説すると、文字列を書いて、画面表示して、パッド入力待ち、ですよっ

DrawStringでの文字列の書き方は・・・
>  DrawString( X座標, Y座標, 文字列, 文字色, 文字背景色 );

PSPの画面サイズは、ヨコ480ピクセル×タテ272ピクセル です。
も一回、実行結果画像を貼ります

こんな文字列が描画されます。

DrawString( ~ ); で文字列を書いたら、ScreenFlip(); で画面表示させます
画面表示させないと反映できませんので重要事項ですよっ


>  do  {             // 何か押されるまでループします
>    ProcessMessage();      // パッド入力
>  }while(CheckHitKeyAll() == 0);
この3行もセットで覚えてください。
パッド入力待ち処理のお約束構文です。

何かパッド押されるまで処理が止まっているようにみえます。覚えておくと、役に立つと思います。


コンパイル・・・の前に
一旦、ソースコードを UTF-8文字コードでテキスト保存して下さい



いざ、コンパイル!
署名してコンパイル(ビルド)するには Makefile に次の2行を追加しておきます

BUILD_PRX = 1
ENCRYPT = 1


次回は、署名コンパイル用の Makefile 及び build.mak についての解説をします


関連記事

[edit]

CM: 0
TB: 0

page top

これらのソースコードですが、ダウンロードして 比較してみた方はどれだけいるんだろうか?

どちらも、実行する作業は同じなのですが、最後だけ、やってる事が違います。

簡単に言うと、
・DXライブラリPortable版は、画面描画をした後で、ループでパッド入力のチェックだけをやっている
・旧OSLib版は、ループで 画面描画を行ないつつ、パッド入力チェックをやっている
という点です

で、DXライブラリPortable版は はっきり言って手抜き なのです
OSLib版のように、毎回画面描画をしつつ、パッド入力をやるのが好ましいプログラミング技術です

配布物はこのままにしておきます。
皆さんが好ましいと判断した "Hello,World." を作ってみてはいかがかな、と。

そろそろ、みなさんも実力を付けて来たと思うので、工作プログラミング(初級)をやってみようかな、と思います

関連記事

[edit]

CM: 0
TB: 0

page top

サイコロさんゲームを作ってみないか!? 

2011/06/27
Mon. 22:18

はいはい、ボクは長い間 いろいろと教え続けてきたと思います。

そこで、皆さんにあるテーマを投げつけて、自作ゲームを作ってもらおうという作戦を開始します。
・・・と言っても、初回なのでフローチャートを用意しておきました。

何を作って頂くかというと、サイコロを振って目を出すだけのプログラムです。
最初なのでね、これだけですよ。

え?もっとかっこいいゲームを作りたいって・・・?そんな人は、そういう妄想を抱いて何も作れないままで居るつもりですか、クソゲーとか決め付けるのは心の狭い考えしか出来ない人です。何にでもチャレンジしてくださいっ!

製作期間は、一週間くらい、とします。

リソースも含めて、全部製作していただきます。

製作のヒントを言うと・・・
・PSPSDKだけで作るもよし、DXライブラリPortableを使って作るもよし
・画面描画の後は、画面表示をしないと反映されない
・サイコロの目は乱数で求める
・パッド入力待ちルーチンはどこかに書いてある
・×ボタン、○ボタンの値はDXライブラリPortableにも定義されている


完成した人は、ウチのアップローダーに登録しても良いですよ(ファイルスペースが許す範囲で)
なので、仕様書や、使い方、著作権表記も書いて頂きます
恥ずかしい・・・と思ってる人は、こっそり作って自分のPSPだけで遊んでいて下さい

サイコロ振るだけです。1~6の数値を乱数で生成すればよろし

これだけ言いましたから、1週間あるんだし、のんびり製作していただけるかと思いますが、どうでしょう。

猫山式のフローチャート貼っておきます

サイコロさん0002

コンテストでも何でも無い、自作ゲーム開発の第一歩だと思って 是非挑戦して下さい
作り方は このブログの記事に書いてあるはずです。いろいろ分散してますが

アップローダーはこちら
http://loda.jp/nekomune_/

猫山も製作します。一応、見本として提出予定

関連記事

[edit]

CM: 6
TB: 0

page top

サイコロさんゲーム製作 過程-01 

2011/08/18
Thu. 23:03

せっかくなので開始です

まず、雛形のソースコードを取りに行きます
PSPプログラミング 公式PSP対応 DXLib Portable v0.5.7 での雛形(書き方)


で、フローチャートの通りに作ってゆくと、このようになります

/*****************************************************************************
* アクション
*****************************************************************************/
void action(void)
{
  int pad_states; // パッド値を入れる変数
 
  while(1)
  {
    背景を黒色で塗りつぶし;
    DrawFormatString(X,Y,色,"さいころ振りますよっ!");
    DrawFormatString(X,Y,色,"○はい  ×終了");
    画面表示;
 
    ProcessMessage(); // パッド読み取り本体
    pad_states = GetInputState(); // パッド値を得る
 
    if(pad_states == ×ボタン)
      return();
 
    if(pad_states == ○ボタン) {
      さいころの目を決める関数();
      さいころの目の表示関数();
    }
    パッド入力待ち関数();
  }
}

まぁ、これから作り上げてゆけばいいのです。
今日はここまで。

関連記事

[edit]

CM: 0
TB: 0

page top

サイコロさんゲーム製作 過程-02 

2011/08/23
Tue. 06:29

ちょっとずつ更新します


void Pad_Wait(); 【最初の方に追加(関数宣言)】
 
(中略)
 
/*****************************************************************************
* アクション
*****************************************************************************/
void action(void)
{
  int pad_states; // パッド値を入れる変数
 
  while(1)
  {
    DrawBox(0,0,480,272,BLACK,TRUE); // 背景を黒色で塗りつぶし
    DrawFormatString(X,Y,色,"さいころ振りますよっ!");
    DrawFormatString(X,Y,色,"○はい  ×終了");
    ScreenFlip();   // 画面表示(実は表画面と裏画面を切り替え)
 
    ProcessMessage(); // パッド読み取り本体
    pad_states = GetInputState(); // パッド値を得る
 
    if(pad_states == DXP_INPUT_CROSS) // ×ボタンなら
      return(); // この関数を抜けます
 
    if(pad_states == DXP_INPUT_CIRCLE) { // ○ボタンなら
      さいころの目を決める関数();
      さいころの目の表示関数();
 
      Pad_Wait(); // パッド入力待ち関数
    }
  }
}
 
/*****************************************************************************
* パッド入力待ち関数
*****************************************************************************/
// この関数は、PSPパッド入力を待つ関数です
// 十字キー、ボタン、全部からどれかが押されるまでひたすら待ちます
// 何か押されたら、即終了して抜けます

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


 
 


さて、残るは
 ・さいころの目を決める関数();
 ・さいころの目の表示関数();
ですが。

さいころの目は乱数で求めるべき、と書きましたが、どうやればいいのでしょうね?
乱数は、続けて同じ数値になる場合がありますね
さいころは正四角形6面体なので、6面全部決めたほうが良いんじゃないかと思います・・・

ヒマな方はちょっと考えてみてくださいませ

関連記事

[edit]

CM: 0
TB: 0

page top

サイコロさんゲーム製作 過程-03 

2011/09/11
Sun. 11:56

今回は、これ
   サイコロの目を求める関数();

サイコロは正四角形の6面体ですね。転がるときは4面が順番に切り替わり、いづれかの面で止まります。
つまり、サイコロの目を求める場合は1つの目だけでなく4面の目、もしくは6面全部の目を求めておけば良い、という事です。

Q.どうプログラミングすればいいでしょう?
A.一次元配列に、サイコロの目を登録しておけばよいのです

 こんな風に
   int saikoro[6]={1,2,3,4,5,6};


サイコロの6面の全部の目の求め方(アルゴリズム)は・・・

1.サイコロの目を、6個から乱数で1つ選ぶ・・・・1面目の数字
2.選んだ1つの目を除いて5個の目に並び替える
3.サイコロの目を、5個から乱数で1つ選ぶ・・・・2面目の数字
4.選んだ1つの目を除いて4個の目に並び替える
5.サイコロの目を、4個から乱数で1つ選ぶ・・・・3面目の数字
6.選んだ1つの目を除いて3個の目に並び替える
7.サイコロの目を、3個から乱数で1つ選ぶ・・・・4面目の数字
8.選んだ1つの目を除いて2個の目に並び替える
9.サイコロの目を、2個から乱数で1つ選ぶ・・・・5面目の数字
10.残った1つのサイコロの目が・・・・・・・・・・6面目の数字

これで良いと思います。では次でプログラム化してみます。

関連記事

[edit]

CM: 3
TB: 0

page top

サイコロさんゲーム製作 過程-04 

2011/09/13
Tue. 22:31

急遽変更

サイコロの目を6面分全部求めるように・・・と書きましたが、これは転がるアニメーションをさせようかという安直な考えを企んでいたからです。kyiさん、鋭いですなww

実際にサイコロを振っても目が繰り返しになっているか確認するヒマはありません。よって6面全部求める必要はなくなりました
サイコロは1つの目だけ求めるように変更します

ではどうするか・・・

かげさんがコメント欄で書いてらっしゃるようにすればいいですね


乱数のタイプはこれにしましょう
// PSPのハードウェアの乱数生成器を使います。高速です
ChangeRandMode(DXP_RANDMODE_HW);
↑これを、初期設定関数の int initton(void) 関数の中へ入れます

サイコロの目を求めるには・・・

  GetRand(5)+1;

これでいいですね。

「サイコロの目を表示」は・・・
転がるアニメをやってから目を出せばいいかと。

転がるアニメは、■と◆の文字の繰り返し表示でいいかと思います


とりあえず作ったのをアップローダーに上げておきました
ダウンロード

関連記事

[edit]

CM: 0
TB: 0

page top

サイコロさんゲーム製作 6面全部求めてみる 

2011/09/20
Tue. 08:05

6面全部求めるばーじょんを作ったので公開

サイコロ6


実行せっと&ソースコード込みで PSP xvi のろだに置いてあります

関連記事

[edit]

CM: 0
TB: 0

page top

はい、PSPのライバル機、ニンテンドーDSシリーズ

このゲーム機用に発売されている、プチコンというソフトが大人気です
BASIC言語でプログラミングが出来るとの事で、動画サイトで探すと沢山投稿されています

猫山の先輩で、こうやま氏という方がいましてプチコンでゲーム開発をやっておいでです
で、せっかくなのでPSP用に移植されてもらえないか交渉してみたところ、快く承諾してくださいました。これは嬉しい

コテ始めに、こうやま氏が移植したスーパーモンスターというプチコンゲームの動画を観ていただきます



このゲームは、ソースコードが公開されています
http://www1.odn.ne.jp/beni/petitcom/super/list.html
DSi とプチコン持ってる人は、ソースコード打ち込んで 遊んでみてはいかがでしょう

どう料理するかは次回のネタです(笑)


こうやま氏のホームページはこちら
http://www1.odn.ne.jp/beni/

[edit]

CM: 0
TB: 0

page top

今まで正式には書いてなかったのです、御免なさい

DXライブラリPortableを改造しただけですが
PSPシステムソフトウェア6.XX以降にも対応した自作ソフトを作りたい人は、これに乗り換えてください
ついでに署名化にも対応させちゃいます!


これは、「DXライブラリ」というWindows版ライブラリのPSP版です。
移植作者さんは 憂煉(ゆうれん)さんです。猫山が改造しました。

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

http://loda.jp/nekomune_/?id=91.zip
dxlibp_v0.5.7_UTF8.zip

まだDXライブラリPortable v0.5.7 を使っていなかった方はこちらの手順を参考にしてください
----------- ココカラ ---------------------------------------------------------------
DXライブラリPortable
↑↑ クリックして入室
ページの左側に、「DX Library Portable」という項目があります。
そこをクリックします。

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

ダウンロードしましょう。
【 必要なファイル 】
・dxlibp_help_v0.5.1.zip ← これがヘルプファイルです(下の方にあります)

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

【 UTF8版インストール方法 】
1. どこでも良いので、仮フォルダ内にて、dxlibp_v0.5.7_UTF8.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_UTF8.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 UTF8コード版)
リンクしているライブラリは、v0.5.7 とほぼ同じです。
雛形です。コピペ推奨。赤い文字は必須。青い文字は必要に応じて書き換えてください。
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_UTF8.a
LIBS += -lpspgu -lz -lm -lpsprtc -lpspaudio -lpspaudiocodec\
-lpsputility -lpspvalloc -lpsppower

# 署名ツールで署名する為に、PRX型の EBOOT.PBP で書き出させます
BUILD_PRX = 1

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 に書いてありました。





これに伴い、ソースコードの保存方法を変更してください
今まではシフトJIS文字コードで保存していたソースコードですが、これからは UTF-8文字コードで保存してからコンパイル&ビルドして下さい



こちらの記事も必ず読んでくださいね
> PSPプログラミング UTF-8コードに潜む罠
> http://nekoyama2gillien.blog36.fc2.com/blog-entry-672.html


> 公式PSPにも対応する、署名済みPSP自作ソフトの作り方 @プログラミングで
> http://nekoyama2gillien.blog36.fc2.com/blog-entry-417.html



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

関連記事

[edit]

CM: 0
TB: 0

page top

DXライブラリPortable v0.5.7 UTF8コード版 を使ってプログラムを書くときに使える雛形です.
これに肉付けをしてゆくと何かのプログラムになります.

あとは、「千早が765衣装で吹っ切れた!?PSP」のソースコードを見て勉強していただければ何か作れるはずなのでがんばって下さい.

この雛形ソースコードでは無音の実行ファイルが作れます.
システムソフトウェア6.xx以降のPSPでは 扱える文字コードがUNICODEのみで シフトJISコードは廃止 なので、DXライブラリPortable v0.5.7 UTF-8版を使用して文字描画をする事を推奨します


まず、閲覧してください
DXLib Portable v0.5.7 UTF8コード版 での雛形(閲覧用)
http://blog-imgs-17.fc2.com/n/e/k/nekoyama2gillien/DXPLib_UTF8_hinagata.html

ダウンロードはこれです
DXLib Portable v0.5.7 UTF8コード版 での雛形(ダウンロード)
http://loda.jp/nekomune_/?id=93.zip
DXLibP_UTF8_ひながたsrc.zip


少しずつ覚えましょうね(#^.^#)

関連記事

[edit]

CM: 0
TB: 0

page top


«  p r e v  | h o m e | n e x t  »


 

2019-07