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

ダイアログ画面というのは、ユーザーに対話形式でどうするか決めてもらうのが目的です。
システムが持っているダイアログ機能をPSPSDKで利用できたので公開します。

【気をつけること】
このソースコードのファイル保存方法は、従来のシフトJISコードではなくてUTF-8コードになっています。
日本語メッセージ表示は、シフトJIS文字列ではなくUTF-8文字列を使っています

ダイアログ画面




『 ダイアログ画面表示サンプル 』のダウンロード
DIALOG_SAMPLE.zip  32.1 KB (32,905 バイト)
ダウンロード
(ソースコード / 実行ファイル)
ユーザーモードのEBOOT.PBPです。




ソースコードを読みたい方は、続きに貼り付けたので見てください

こっちのソースコードをコピペ利用するのは、あまりお勧めしません。
ダウンロードしたソースコードをご利用下さい。
dialog.c
  1. /*
  2. * PSP Software Development Kit - http://www.pspdev.org
  3. * ----------------------------------------------------------------------
  4. * Licensed under the BSD license, see LICENSE in PSPSDK root for details.
  5. *
  6. * main.c - Sample to demonstrate how to use the message dialog utility
  7. *
  8. * 日本語仕様とかに変更してみましたよ版 By 猫山猫宗
  9. *
  10. * Copyright (c) 2005 Marcus Comstedt <marcus@mc.pp.se>
  11. *      (c) 2008 InsertWittyName <tias_dp@hotmail.com>
  12. *      (c) 2010 Nekoyama Nekomune <nekomune@gmail.com>
  13. */
  14. #include <pspkernel.h>
  15. #include <pspdisplay.h>
  16. #include <stdio.h>
  17. #include <string.h>
  18. #include <stdlib.h>
  19. #include <math.h>
  20. #include <pspmoduleinfo.h>
  21. #include <psputility.h>
  22. #include <pspgu.h>
  23. #include <pspgum.h>
  24. /* Define the module info section */
  25. PSP_MODULE_INFO("MsgDialog Sample", 0, 0, 0);
  26. /* Exit callback */
  27. int exit_callback(int arg1, int arg2, void *common)
  28. {
  29.   sceKernelExitGame();
  30.   return 0;
  31. }
  32. /* Callback thread */
  33. int CallbackThread(SceSize args, void *argp)
  34. {
  35.   int cbid;
  36.   cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
  37.   sceKernelRegisterExitCallback(cbid);
  38.   sceKernelSleepThreadCB();
  39.   return 0;
  40. }
  41. /* Sets up the allback thread and returns its thread id */
  42. int SetupCallbacks(void)
  43. {
  44.   int thid = 0;
  45.   thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
  46.   if (thid >= 0)
  47.     sceKernelStartThread(thid, 0, 0);
  48.   return thid;
  49. }
  50. static unsigned int __attribute__((aligned(16))) list[262144];
  51. #define BUF_WIDTH (512)
  52. #define SCR_WIDTH (480)
  53. #define SCR_HEIGHT (272)
  54. #define PIXEL_SIZE (4) /* change this if you change to another screenmode */
  55. #define FRAME_SIZE (BUF_WIDTH * SCR_HEIGHT * PIXEL_SIZE)
  56. #define ZBUF_SIZE (BUF_WIDTH SCR_HEIGHT * 2) /* zbuffer seems to be 16-bit? */
  57. static void SetupGu()
  58. {
  59.   sceGuInit();
  60.   sceGuStart(GU_DIRECT,list);
  61.   sceGuDrawBuffer(GU_PSM_8888,(void*)0,BUF_WIDTH);
  62.   sceGuDispBuffer(SCR_WIDTH,SCR_HEIGHT,(void*)0x88000,BUF_WIDTH);
  63.   sceGuDepthBuffer((void*)0x110000,BUF_WIDTH);
  64.   sceGuOffset(2048 - (SCR_WIDTH/2),2048 - (SCR_HEIGHT/2));
  65.   sceGuViewport(2048,2048,SCR_WIDTH,SCR_HEIGHT);
  66.   sceGuDepthRange(0xc350,0x2710);
  67.   sceGuScissor(0,0,SCR_WIDTH,SCR_HEIGHT);
  68.   sceGuEnable(GU_SCISSOR_TEST);
  69.   sceGuDepthFunc(GU_GEQUAL);
  70.   sceGuEnable(GU_DEPTH_TEST);
  71.   sceGuFrontFace(GU_CW);
  72.   sceGuShadeModel(GU_SMOOTH);
  73.   sceGuEnable(GU_CULL_FACE);
  74.   sceGuEnable(GU_CLIP_PLANES);
  75.   sceGuFinish();
  76.   sceGuSync(0,0);
  77.   sceDisplayWaitVblankStart();
  78.   sceGuDisplay(GU_TRUE);
  79. }
  80. static void DrawStuff(void)
  81. {
  82.   sceGuStart(GU_DIRECT,list);
  83.   // clear screen
  84.   sceGuClearColor(0xff554433);
  85.   sceGuClearDepth(0);
  86.   sceGuClear(GU_COLOR_BUFFER_BIT|GU_DEPTH_BUFFER_BIT);
  87.   sceGuFinish();
  88.   sceGuSync(0,0);
  89. }
  90. /* Utility dialog functions */
  91. pspUtilityMsgDialogParams dialog;
  92. static void ConfigureDialog(pspUtilityMsgDialogParams *dialog, size_t dialog_size)
  93. {
  94.   memset(dialog, 0, dialog_size);
  95.   dialog->base.size = dialog_size;
  96.   sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE,
  97.           &dialog->base.language); // 表示言語を取得
  98.   sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN,
  99.           &dialog->base.buttonSwap); // ×○ボタン逆になっているかを取得
  100.   dialog->base.graphicsThread = 0x11;
  101.   dialog->base.accessThread = 0x13;
  102.   dialog->base.fontThread = 0x12;
  103.   dialog->base.soundThread = 0x10;
  104. }
  105. static void ShowErrorDialog(const unsigned int error)
  106. {
  107.   ConfigureDialog(&dialog, sizeof(dialog));
  108.   dialog.mode = PSP_UTILITY_MSGDIALOG_MODE_ERROR;
  109.   dialog.options = PSP_UTILITY_MSGDIALOG_OPTION_ERROR;
  110.   dialog.errorValue = error;
  111.   sceUtilityMsgDialogInitStart(&dialog);
  112.   for(;;) {
  113.     DrawStuff();
  114.     switch(sceUtilityMsgDialogGetStatus()) {
  115.       case PSP_UTILITY_DIALOG_VISIBLE:
  116.         sceUtilityMsgDialogUpdate(1);
  117.         break;
  118.       case PSP_UTILITY_DIALOG_QUIT:
  119.         sceUtilityMsgDialogShutdownStart();
  120.         break;
  121.       case PSP_UTILITY_DIALOG_NONE:
  122.         return;
  123.     }
  124.     sceDisplayWaitVblankStart();
  125.     sceGuSwapBuffers();
  126.   }
  127. }
  128. static void ShowMessageDialog(const char *message, int enableYesno)
  129. {
  130.   ConfigureDialog(&dialog, sizeof(dialog));
  131.   dialog.mode = PSP_UTILITY_MSGDIALOG_MODE_TEXT;
  132.   dialog.options = PSP_UTILITY_MSGDIALOG_OPTION_TEXT;
  133.   if(enableYesno)
  134.     dialog.options |= PSP_UTILITY_MSGDIALOG_OPTION_YESNO_BUTTONS
  135.             |PSP_UTILITY_MSGDIALOG_OPTION_DEFAULT_NO;
  136.   strcpy(dialog.message, message);
  137.   sceUtilityMsgDialogInitStart(&dialog);
  138.   for(;;) {
  139.     DrawStuff();
  140.     switch(sceUtilityMsgDialogGetStatus()) {
  141.     case 2:
  142.       sceUtilityMsgDialogUpdate(1);
  143.       break;
  144.     case 3:
  145.       sceUtilityMsgDialogShutdownStart();
  146.       break;
  147.     case 0:
  148.       return;
  149.     }
  150.     sceDisplayWaitVblankStart();
  151.     sceGuSwapBuffers();
  152.   }
  153. }
  154. /* main routine */
  155. int main(int argc, char *argv[])
  156. {
  157.   SetupCallbacks();
  158.   SetupGu();
  159.   char string[256];
  160.   char button[12];
  161.   ShowMessageDialog("これはメッセージダイアログなのだ。\n"
  162.            "   これを表示した後で\n"
  163.            "エラーダイアログを表示するッ!", 1);
  164.   if(dialog.buttonPressed == PSP_UTILITY_MSGDIALOG_RESULT_YES)
  165.     sprintf(button, "はい");
  166.   else if(dialog.buttonPressed == PSP_UTILITY_MSGDIALOG_RESULT_NO)
  167.     sprintf(button, "いいえ");
  168.   else
  169.     sprintf(button, "戻る");
  170.   ShowErrorDialog(0x80020148); // ありがちなエラーコードです(笑)
  171.   sprintf(string, "これはメッセージダイアログでっす。\n"
  172.           "入力後、このプログラムは終了します。\n"
  173.           "ところでさっき、あなたは '%s' を選びましたね?", button);
  174.   ShowMessageDialog(string, 0);
  175.   sceKernelExitGame();
  176.   return 0;
  177. }



Makefile

PSPSDK = $(shell psp-config --pspsdk-path)
PSPLIBSDIR = $(PSPSDK)/..
TARGET = msgdialogsample
OBJS = dialog.o
LIBS = -lpsputility -lpspgum -lpspgu -lm

# Uncomment the following line to comple for custom firmware 3.xx
#BUILD_PRX = 1

CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = MESSAGE DIALOG
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
dialog.o :dialog.c




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

[edit]

CM: 0
TB: 0

page top

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

page top

コメントの投稿

Secret

page top

トラックバック

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

page top


h o m e |


 

2017-10