PSP程序开发例子解析(二)Images

第二个例子程序演示了如何在屏幕上绘制图片 附上源码 变化不大 很简单的几句代码搞定了
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()
{
}

 
第二个例子很简单结束了 上图

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值