- 浏览: 135393 次
- 性别:
- 来自: 大连
文章分类
最新评论
-
datawarehouse:
datawarehouse 写道ngix 淘宝是基于这个开发了 ...
解密淘宝网的开源架构 -
datawarehouse:
ngix 淘宝是基于这个开发了一个自己的webserver吧。 ...
解密淘宝网的开源架构 -
eyelock:
我运行报错,,楼主能解答一下G,对swing不熟。
raphi ...
假期没事,写了个90行的俄罗斯方块,Java实现,史上最小巧 -
lostsky_11:
楼主写出例子了么?物理碰撞部分可能跟你说的差不多渲染部分可以搜 ...
Where is my water 游戏算法 -
xouou_53320:
都是牛人
假期没事,写了个90行的俄罗斯方块,Java实现,史上最小巧
HGEParticles这个例子很BT 模仿WindowsMediaPlayer的效果 跟随mp3的播放的波形来显示一些特效 暂时没怎么看明白 慢慢解析 GameApp.h #ifndef _GAMEAPP_H_ #define _GAMEAPP_H_ #include <JApp.h> class hgeParticleSystem; class JTexture; class JQuad; class hgeFont; class JMusic; class GameApp: public JApp { public: GameApp(); virtual ~GameApp(); virtual void Create(); virtual void Destroy(); virtual void Update(); virtual void Render(); virtual void Pause(); virtual void Resume(); void LoadNewParticleSys(); private: float mAngle; float mTimer; hgeFont* mFont;//屏幕文字显示利用hge的字体类库 具体和TTF的类有什么区别不清楚 hgeParticleSystem* mMovingParticleSys; hgeParticleSystem* mParticleSys; JTexture *mTexture; JQuad *mCircle; JQuad *mParticles[16]; int mCurrParticleSys; int mCurrParticle; float x; float y; float dx; float dy; float mSpeed; float mFriction; JMusic* mMusic; }; #endif GameApp.cpp #include <stdio.h> #include <JAssert.h> #include <JGE.h> #include <JRenderer.h> #include <JSoundSystem.h> #include <JLBFont.h> #include <hge\hgeparticle.h> #include <hge\hgefont.h> #include "GameApp.h" //------------------------------------------------------------------------------------- // Constructor. Variables can be initialized here. // //------------------------------------------------------------------------------------- GameApp::GameApp() { mAngle = 0.0f; mTimer = 0.0f; for (int i=0;i<16;i++) mParticles[i] = NULL; mMovingParticleSys = NULL; mParticleSys = NULL; mTexture = NULL; mCircle = NULL; x = 100.0f; y = 100.0f; dx = 0.0f; dy = 0.0f; mSpeed = 90; mFriction = 0.98f; } //------------------------------------------------------------------------------------- // Destructor. // //------------------------------------------------------------------------------------- GameApp::~GameApp() { } //------------------------------------------------------------------------------------- // This is the init callback function. You should load and create your in-game // resources here. // //------------------------------------------------------------------------------------- void GameApp::Create() { mTexture = JRenderer::GetInstance()->LoadTexture("particles.png", TEX_TYPE_USE_VRAM); // load all the particle images int n = 0; for (int i=0;i<4;i++) { for (int j=0;j<4;j++) { mParticles[n] = new JQuad(mTexture, j*32, i*32, 32, 32); mParticles[n]->SetHotSpot(16,16); n++; } } mCircle =new JQuad(mTexture, 96, 64, 32, 32); mCircle->SetColor(ARGB(0xFF,0xFF,0xA0,0x00)); mCircle->SetHotSpot(16,16); // the particle system that move with the circle mMovingParticleSys = new hgeParticleSystem("trail.psi", mParticles[5]); mMovingParticleSys->Fire(); mCurrParticleSys = 0; mCurrParticle = 0; // Load a font mFont = new hgeFont("font2.fnt"); LoadNewParticleSys(); JSoundSystem* sound = JSoundSystem::GetInstance(); if (sound) mMusic = sound->LoadMusic("12thWarrior.mp3"); // Load a background music. if (mMusic) JSoundSystem::GetInstance()->PlayMusic(mMusic, true); } void GameApp::LoadNewParticleSys() { if (mParticleSys) { delete mParticleSys; mParticleSys = NULL; } char s[80]; sprintf(s, "particle%d.psi", (mCurrParticleSys+1)); mParticleSys = new hgeParticleSystem(s, mParticles[mCurrParticle]); mParticleSys->MoveTo(SCREEN_WIDTH_F/2, SCREEN_HEIGHT_F/2); mParticleSys->Fire(); } //------------------------------------------------------------------------------------- // This is the clean up callback function. You should delete all your in-game // resources, for example texture and quads, here. // //------------------------------------------------------------------------------------- void GameApp::Destroy() { SAFE_DELETE(mMovingParticleSys); SAFE_DELETE(mCircle); for (int i=0;i<16;i++) SAFE_DELETE(mParticles[i]); SAFE_DELETE(mParticleSys); SAFE_DELETE(mTexture); SAFE_DELETE(mFont); SAFE_DELETE(mMusic); } //------------------------------------------------------------------------------------- // This is the update callback function and is called at each update frame // before rendering. You should update the game logic here. // //------------------------------------------------------------------------------------- void GameApp::Update() { JGE* engine = JGE::GetInstance(); // do a screen shot when the TRIANGLE button is pressed if (engine->GetButtonClick(PSP_CTRL_TRIANGLE)) { char s[80]; // save screen shot to root of Memory Stick sprintf(s, "ms0:/screenshot.png"); JRenderer::GetInstance()->ScreenShot(s); } // exit when the CROSS button is pressed if (engine->GetButtonClick(PSP_CTRL_CROSS)) { engine->End(); return; } int quadIdx[] = { 7, 15, 0, 5, 7, 0, 1, 15, 4 }; // change particle image if PSP_CTRL_LEFT or PSP_CTRL_RIGHT is down if (engine->GetButtonClick(PSP_CTRL_LEFT)) { mCurrParticle--; if (mCurrParticle < 0) mCurrParticle = 15; mParticleSys->info.sprite = mParticles[mCurrParticle]; mMovingParticleSys->info.sprite = mParticles[15-mCurrParticle]; } if (engine->GetButtonClick(PSP_CTRL_RIGHT)) { mCurrParticle++; if (mCurrParticle > 15) mCurrParticle = 0; mParticleSys->info.sprite = mParticles[mCurrParticle]; mMovingParticleSys->info.sprite = mParticles[15-mCurrParticle]; } // change particle system if PSP_CTRL_DOWN or PSP_CTRL_UP is down if (engine->GetButtonClick(PSP_CTRL_DOWN)) { mCurrParticleSys--; if (mCurrParticleSys < 0) mCurrParticleSys = 8; mCurrParticle = quadIdx[mCurrParticleSys]; LoadNewParticleSys(); } if (engine->GetButtonClick(PSP_CTRL_UP)) { mCurrParticleSys++; if (mCurrParticleSys > 8) mCurrParticleSys = 0; mCurrParticle = quadIdx[mCurrParticleSys]; LoadNewParticleSys(); } float dt = engine->GetDelta(); // Get time elapsed since last update. mTimer += dt; mAngle += 2.0f*dt; if (mAngle >= M_PI*2) mAngle = 0; if (mTimer > 0.01f) // update the moving circle and particle at about 100fps { if (engine->GetAnalogX()<64) dx-=mSpeed*mTimer; if (engine->GetAnalogX()>192) dx+=mSpeed*mTimer; if (engine->GetAnalogY()<64) dy-=mSpeed*mTimer; if (engine->GetAnalogY()>192) dy+=mSpeed*mTimer; // Do some movement calculations and collision detection dx *= mFriction; dy *= mFriction; x += dx; y += dy; if (x>470) { x=470-(x-470); dx=-dx; } if (x<16) { x=16+16-x; dx=-dx; } if (y>260) { y=260-(y-260); dy=-dy; } if (y<16) { y=16+16-y; dy=-dy; } // Update particle system mMovingParticleSys->info.nEmission=(int) (dx*dx+dy*dy)*2; mMovingParticleSys->MoveTo(x,y); mTimer = 0.0f; } mMovingParticleSys->Update(dt); mParticleSys->Update(dt); } //------------------------------------------------------------------------------------- // All rendering operations should be done in Render() only. // //------------------------------------------------------------------------------------- void GameApp::Render() { // get JRenderer instance JRenderer* renderer = JRenderer::GetInstance(); // clear screen to black renderer->ClearScreen(ARGB(0,0,0,0)); // render circle renderer->RenderQuad(mCircle, x, y); // set additive blending renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE); mParticleSys->Render(); mMovingParticleSys->Render(); // set normal blending renderer->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA); // draw the current image used for the particle system shown in the middle renderer->FillRect(SCREEN_WIDTH_F-37, 3, 34, 34, ARGB(255,0,0,128)); mParticles[mCurrParticle]->SetColor(ARGB(255,255,255,255)); renderer->RenderQuad(mParticles[mCurrParticle], SCREEN_WIDTH_F-20, 20); // turn off bilinear filtering to render sharp text renderer->EnableTextureFilter(false); mFont->printf(5, 5, HGETEXT_LEFT, "[Left/Right] Change Particle Image"); char s[80]; mFont->printf(5, 20, HGETEXT_LEFT, "[Up/Down] Change Effect -> particle%d.psi", (mCurrParticleSys+1)); mFont->printf(5, 35, HGETEXT_LEFT, "[Analog] Move Circle"); renderer->EnableTextureFilter(true); } //------------------------------------------------------------------------------------- // This function is called when the system wants to pause the game. You can set a flag // here to stop the update loop and audio playback. // //------------------------------------------------------------------------------------- void GameApp::Pause() { } //------------------------------------------------------------------------------------- // This function is called when the game returns from the pause state. // //------------------------------------------------------------------------------------- void GameApp::Resume() { }
发表评论
-
过年没事,一天时间写了一个是男人就撑住20秒的Java版
2012-01-24 13:21 3792每年过年都没事,都得写点小东西,今年是是男人就撑过20秒(20 ... -
Where is my water 游戏算法
2012-01-23 19:56 2104过年把Where is my water完了一遍,对这个游戏的 ... -
假期没事,写了个90行的俄罗斯方块,Java实现,史上最小巧
2010-02-16 23:03 11070Bug已经Fix~~ 注释已经补充 import jav ... -
俄罗斯方块:C++中的常用错误原因~~
2008-07-20 20:45 1316很久没有用C++写程序了。。用起来很不顺手! 出了问题不知道怎 ... -
疯狂游戏系列之(一)疯狂俄罗斯策划
2008-07-18 20:38 1489闲来无事,做一个PSP上的俄罗斯方块游戏,大致原则是两个字 疯 ... -
PSP程序开发例子解析(十二)InputSystem
2008-07-14 20:50 1065InputSystem例子掩饰了如何在程序中输入文字 #i ... -
PSP程序开发例子解析(十)HGEDistortionMesh
2008-07-14 20:49 1698HGEDistortionMesh例子应用了HGE包中的内容 ... -
PSP程序开发例子解析(九)3DPrimer
2008-07-14 20:48 12363D例子显示一个Cube和一个人物 不断旋转 具体底部底层AP ... -
PSP程序开发例子解析(八)Animator
2008-07-14 20:48 950GameApp.cpp #include <std ... -
PSP程序开发例子解析(七)DisplayingChinese
2008-07-14 20:46 959显示中文 加载点阵文件 没啥说的 就是不清楚点阵文件是哪来的= ... -
PSP程序开发例子解析(六)TrueTypeFont
2008-07-14 20:45 1057按照Windows的ttf字体显示文字。。跑不起来 略 #i ... -
PSP程序开发例子解析(五)Shapes
2008-07-14 20:44 916绘制各种形状 无话可说 #include <st ... -
PSP程序开发例子解析(四)Splines
2008-07-14 20:38 954第四个例子讲述了曲线 ... -
PSP程序开发例子解析(三)ResourceManager
2008-07-14 20:38 961太晚了 明天再写 弄个res文件没找到 换了个工程 copy源 ... -
PSP程序开发例子解析(二)Images
2008-07-14 20:37 1151第二个例子程序演示了 ... -
PSP程序开发例子解析(一)HelloWorld
2008-07-14 20:31 3019今天晚上把PSP的开发环境搭建了起来 并且看了看PSP的Hel ... -
关于BMP图片格式(部分垃圾代码)
2007-11-17 19:05 1343java 代码 做了个刷投票的程序 识别随即码图片的地方 ...
相关推荐
综上所述,PSP程序设计基础不仅涵盖了PSP的历史发展脉络、硬件架构细节,还包括软件开发环境及调试方法等多个方面。对于初学者来说,了解这些基础知识将有助于更好地掌握PSP开发技能,为未来的项目开发打下坚实的...
PSPSDK 是 PSP 游戏开发的软件开发套件,提供了必要的头文件、库文件和示例程序等工具。toolchain 是 PSP 游戏开发的编译器和链接器,负责将源代码编译成 PSP 可执行文件。 二、CYGWIN 的安装 要安装 CYGWIN,只...
【PSP编程开发环境的建立】涉及的主要知识点是PSP(PlayStation Portable)软件的开发流程,这包括在Visual Studio 2008(VS2008)和Eclipse集成开发环境中设置PSP的开发环境,以及编写和编译PSP程序的基本步骤。...
pspdev,有需要的下。 很好的一个psp编程工具 psp编程必备。
【PSP开发工具Miro Lua】是一款专为PSP(PlayStation Portable)平台设计的lua脚本开发环境,它为LUA爱好者提供了在PSP上编写、测试和运行lua程序的便利工具。LUA是一种轻量级的脚本语言,因其简洁的语法和强大的...
标题中的“psp 中文输入程序 源代码”指的是为PlayStation Portable(PSP)游戏掌机开发的中文输入法软件的原始编程代码。PSP是一款由索尼公司推出的便携式多媒体设备,它允许用户运行游戏、播放媒体以及进行其他...
### 汇编语言返回DOS系统方法:程序段前缀(PSP)与返回机制 #### 一、程序段前缀(PSP)介绍 在早期的个人计算机操作系统中,特别是MS-DOS环境下,程序段前缀(Program Segment Prefix, PSP)扮演着极其重要的角色。PSP...
标题中的“psp5.50直接升级6.60程序”指的是PlayStation Portable(PSP)游戏设备的固件升级过程。PSP是一款由索尼公司推出的掌上游戏机,其系统固件版本的更新旨在提供新功能、优化性能以及修复已知问题。在这个...
PSP SDK(Software Development Kit)则是为开发PSP游戏和应用程序提供的核心工具集,它包含了编译器、库文件、头文件、文档、示例代码以及调试工具等,使得开发者能够创建自己的PSP软件。 **PSP SDK中的关键组成...
6.XX Downgrader是一款给官方系统的PSP进行降级的程序,使用它能够将6.31/6.35/6.38/6.39/6.60官方系统的PSP降级至6.20/6.35系统。 现在6.60系统也终于能够通过降级来安装自制系统了! 使用方法: 1.把6.20...
### 使用Eclipse调试PSP程序的关键知识点...通过上述步骤,开发者可以有效地使用Eclipse 对PSP 程序进行调试,提高开发效率并减少错误。这对于从事PSP 游戏开发或者其他基于PSP 平台的应用开发的人员来说是非常有用的。
2. **Eclipse**:一个强大的C/C++集成开发环境(IDE),用于编写、编译及调试PSP程序。 3. **Blender3D**:一个开源的3D建模工具,用于创建游戏中的3D资产。 这些工具构成了一个完整的PSP游戏开发流程。 #### ...
Develop for the PSP,看看国外同国内对PSP的距离,是一本学习PSP编程的书。
《软件开发过程PSP:构建高效能的个人开发体系》 在软件开发领域,PSP(Personal Software Process,个人软件过程)是一种系统化的方法,旨在提高软件工程师的生产力和软件质量。PSP作为SEI(Software Engineering ...
psp 6.60升级程序,适合从3.71m33 升级到6.60,把程序放到/psp/game/update文件夹内
国外一个教授用psp做并行计算的书 Chapter 1: Introduction Chapter 2: Overview of the PSP Chapter 3: Quickies Chapter 4: Taking Apart Your PSP Chapter 5: Getting Online: Configuring Your PSP for ...
标题中的"PSP刷机.rar"指的是为PlayStation Portable(PSP)掌上游戏机进行固件更新或系统修改的过程,通常是为了安装自制软件、增强功能或者运行未授权的游戏。这个压缩包文件可能包含了用于刷机的所有必要工具和...
PSP自制软件开发利器,JGE 1.0 第3部分(由于太大分卷压缩)
BFMLoaderV100_PSP_ 是一个专为PSP(PlayStation Portable)平台设计的软件加载器,由西方科学团队开发。这个加载器的主要功能是处理和加载BFM格式的文件,BFM全称可能是"Binary Format for Multimedia"或类似的...
这个驱动程序处理了硬件层面上的数据传输,允许用户传输游戏、音乐、视频等文件到PSP,或者使用PSP作为存储设备。值得注意的是,系统默认支持的USB驱动可能是针对Type-C接口,但有些特定的应用,如PSPdisp,可能需要...