不過遊戲 主機 開發壹般都是需要相關套件
而且周期較長 壹個人很難做得來
PSP程序開發例子解析(二)Images2008-07-03 20:46第二個例子程序演示了如何在屏幕上繪制圖片 附上源碼 變化不大 很簡單的幾句代碼搞定了
1.頭文件GameApp.h
#ifndef _GAMEAPP_H_
#define _GAMEAPP_H_
#include <JApp.h>
class JQuad;//JQuad定義了圖片上的顯示範圍 比如很多的小圖片存為了壹個大圖片 在大圖片上指定顯示的坐標
class JSprite;//動畫 似乎沒用到
class JTexture;//把壹個圖片讀成了壹個JTexture = =!裏面不曉得有什麽內容 沒有doc可看
class GameApp: public JApp
{
private:
JTexture* mBgTex;//整個背景的圖片
JTexture* mSpriteTex;//2個人物的圖片
JQuad* mBg;//定義了整個背景的大小
JQuad* mBoy;//男孩在人物圖片上的大小
JQuad* mGirl;//女孩在人物圖片上的大小
public:
GameApp();
virtual ~GameApp();
virtual void Create();
virtual void Destroy();
virtual void Update();
virtual void Render();
virtual void Pause();
virtual void Resume();
};
#endif
2.源碼文件GameApp.cpp
#include <stdio.h>
#include <JGE.h>
#include <JRenderer.h>
#include <JLBFont.h>
#include <JSprite.h>
#include <JFileSystem.h>
#include "GameApp.h"
GameApp::GameApp()
{
mBgTex = NULL;
mBg = NULL;
mSpriteTex = NULL;
mBoy = NULL;
mGirl = NULL;//都給它設成NULL幹啥 沒有意義啊
GameApp::~GameApp()
{
}
//程序啟動
void GameApp::Create()
{
JRenderer* renderer = JRenderer::GetInstance();
// Load background texture (texture format can be PNG, JPG or GIF)
mBgTex = renderer->LoadTexture("bg.jpg");//初始化加載背景圖片 可以PNG JPG GIF的 開發的API封裝的很好 都提供的了高層的API 沒有暴露什麽底層的東西= =! 看來之前我對圖片處理的考慮有點多慮了 能運行上100M的3D遊戲 應該不會太在乎內存消耗 不泄露就行
// Load texture for the characters (use TEX_TYPE_USE_VRAM to load texture into VRAM on PSP and this can speed up the rendering)
mSpriteTex = renderer->LoadTexture("planet.png", TEX_TYPE_USE_VRAM);//用這個參數來加速
//JQuad定義了壹個範圍 在沒BgTex上 從左上角到右下角 看代碼知道了PSP屏幕的尺寸為480*272
mBg = new JQuad(mBgTex, 0, 0, 480, 272); // Create background quad for rendering.
// Now let's create the image quads for the characters. The two characters are stored in one texture
// so we have to know the location and size of each one to make the quads.
mBoy = new JQuad(mSpriteTex, 0, 0, 67, 88);//同樣對男孩的區域定義範圍
mBoy->SetHotSpot(33.5f, 44.0f); // Set the pivot point to the middle.定義了這個圖片的核心坐標 這裏定義為中心 在旋轉的時候圍繞中心旋轉 恩
mGirl = new JQuad(mSpriteTex, 68, 0, 68, 90);//女孩的圖片從68開始越過了男孩的圖片
mGirl->SetHotSpot(34.0f, 45.0f);//同樣設置中心為HotSpot
}
void GameApp::Destroy()
{
SAFE_DELETE(mBgTex);//調用了壹個宏 在JTypes.h裏面:#define SAFE_DELETE(x) if (x) { delete x; x = NULL; } 另有文章說釋放JTexture需要用什麽engine.什麽 應該效果是壹樣的mEngine->FreeMusic(mMusic);
SAFE_DELETE(mBg);
SAFE_DELETE(mSpriteTex);
SAFE_DELETE(mBoy);
SAFE_DELETE(mGirl);
}
//Update方法沒有變化
void GameApp::Update()
{
JGE* engine = JGE::GetInstance();
if (engine->GetButtonClick(PSP_CTRL_TRIANGLE)) // Do a screen shot when the TRIANGLE button is pressed
{
char s[80];
sprintf(s, "ms0:/screenshot.png");
JRenderer::GetInstance()->ScreenShot(s);
}
if (engine->GetButtonClick(PSP_CTRL_CROSS)) // Exit when the CROSS button is pressed
{
engine->End();
return;
}
}
void GameApp::Render()
{
JRenderer* renderer = JRenderer::GetInstance();
renderer->RenderQuad(mBg, 0, 0);//具體畫屏幕了 繪制整個背景 畫mBg的範圍JQuad
renderer->RenderQuad(mBoy, 33.5, 44, 0.0f, 1.0f, 1.0f); // Scale down the characters a little bit when rendering.
renderer->RenderQuad(mGirl, 320, 235, 0.0f, 0.7f, 0.7f);//參數分別為x點 y點 左上角開始計算 0.0f為旋轉角度 沒弄明白這個單位是什麽 0.7f 和0.7f是x軸和y軸的縮放比例1是按照原大小0.7f是縮小了
Sleep(1);//自己加的 純粹是為了減少CPU占用 否則壹運行CPU就滿了 似乎這個函數在PSP中不支持
}
void GameApp::Pause()
{
}
void GameApp::Resume()