`
wangshu3000
  • 浏览: 135098 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

PSP程序开发例子解析(四)Splines

阅读更多
第四个例子讲述了曲线的作用 制作一些RoadPoint时 会用到 让一个图片对象按照曲线运行
代码如下GameApp.cpp:
#include <stdio.h>

#include <JGE.h>
#include <JRenderer.h>
#include <JLBFont.h>
#include <JSpline.h>
#include <JGameObject.h>

#include "GameApp.h"


GameApp::GameApp()
{
mFont = NULL;
mSpline = NULL;
mTexBg = NULL;
mTexPlane = NULL;
mBg = NULL;
mPlane = NULL;

}


GameApp::~GameApp()
{
}


void GameApp::Create()
{

mFont = new JLBFont("f3", 16, true);

mSpline = new JSpline();       // Load spline and scale it down a little bit because the 
mSpline->Load("sample.spl", 0.60f, 0.56f);   // spline was originally created for 800x600 size screen.
mSpline->GeneratePixels();       // Generate all the points on the spline.
//加载曲线 根据曲线文件加载 文件中定义了很多路点 自动通过GeneratePixels算出曲线每个点的值 需要缩放一下

JRenderer* renderer = JRenderer::GetInstance();

mTexBg = renderer->LoadTexture("bg.jpg");
mBg = new JQuad(mTexBg, 0, 0, SCREEN_WIDTH_F, SCREEN_HEIGHT_F);

mTexPlane = renderer->LoadTexture("sprites.png");   // Load the plane and set up the animation frames.
mPlane = new JGameObject(mTexPlane, 1, 1, 63, 63);//根据第一个图片位置设置第一个Frame
mPlane->AddFrame(1,65,63,63,1000);//中间的Frame
mPlane->AddFrame(1,129,63,63,3000);//最后的Frame
mPlane->SetHotSpot(32, 32);//设置中心

mPlane->SetRenderFlags(RENDER_FLAG_ANGLE);     // Make the plane facing the direction it is moving to.
//使飞机可以旋转

mIndex = 0;
mCounter = 0.0;

Point pt;
mSpline->GetPixel(pt, mIndex);//获取第0-index点的坐标Point
mPlane->SetPosition(pt.x, pt.y);//设置飞机的坐标

mSpline->GetPixel(pt, mIndex+1);//获取下一个1-index点的坐标Point
mPlane->SetDirection(pt.x, pt.y);//设置方向为从0-index坐标指向1-index坐标

mShowSpline = false;//不显示曲线

}


void GameApp::Destroy()
{

SAFE_DELETE(mFont);
SAFE_DELETE(mSpline);
SAFE_DELETE(mTexBg);
SAFE_DELETE(mTexPlane);
SAFE_DELETE(mBg);
SAFE_DELETE(mPlane);

}


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;
}

if (engine->GetButtonClick(PSP_CTRL_CIRCLE))
{
   mShowSpline = !mShowSpline;
}

float dt = engine->GetDelta();//获取引擎运行的时间Delta

mPlane->Update(dt);//将飞机更新到Delta时间应该显示的图片

mCounter += 100*dt;//根据运行的时间来设置当前应该显示的位置 根据执行频率*100 比如1毫秒刷新一次 则略过0.1个index
int curr = (int) mCounter;
if (mIndex != curr)          // Update position of the plane
{
   if (curr >= mSpline->GetPixelCount())//如果当前的运行次数>了整个曲线的index点的次数 回到起始点
   {
    mCounter = 0.0f;
    curr = 0;
   }

   mIndex = curr;//赋当前的index位置的值

   Point pt;
   mSpline->GetPixel(pt, mIndex);//取得index所在的点
   mPlane->SetPosition(pt.x, pt.y);//设置飞机

   mSpline->GetPixel(pt, mIndex+1);//取得index+1的点
   mPlane->SetDirection(pt.x, pt.y);//从index指向index+1的方向
}
//Update方式是不断循环来执行 无限循环 直到按了叉键
}


void GameApp::Render()
{

JRenderer* renderer = JRenderer::GetInstance();

renderer->RenderQuad(mBg, 0, 0);

   mFont->SetColor(ARGB(255,255,255,255));
   mFont->DrawString("Press O to show spline", 5.0f, 130.0f, JGETEXT_LEFT); 

if (mShowSpline)
   mSpline->Render(0, 0);//封装了整个绘制曲线的方法Render一下

mPlane->Render();//Render一下飞机 飞机的Sprite方法好像有问题 不能动态显示当前祯 这几个例子都有点小问题 质量不高= =!
Sleep(1);
}


void GameApp::Pause()
{

}


void GameApp::Resume()
{

}

 

分享到:
评论

相关推荐

    t-splines3.2

    《T-Splines 3.2:Rhino插件的深度解析及应用指南》 T-Splines是一款在计算机辅助设计(CAD)领域备受推崇的插件,特别针对Rhino软件进行开发,以提升NURBS(非均匀有理B样条)建模的效率与灵活性。版本3.2是其一个...

    matlab开发-Splines

    "ebertolazzi-Splines-b4666f1"可能是一个特定的样条库项目,由Erbetolazzi开发,并在某个版本(b4666f1)下进行了更新。这个库可能包含了实现样条函数的各种函数,以及C/C++源代码,通过MEX接口供MATLAB使用。使用...

    Curvy Splines v6.0.1.zip

    在游戏开发和3D场景设计中,曲线系统扮演着至关重要的角色,它们能够为游戏世界增添动态美感,实现复杂的运动轨迹和流畅的动画效果。Curvy Splines是一款专为Unity3D设计的曲线插件,其最新版本v6.0.1为用户提供了...

    Dreamteck Splines 3.0.3

    8、程序原语和预设保存 9、导入和导出功能 10、变形状态 11、多线程 12、易于扩展的功能 13、广泛的API文档和用户手册。 Dreamteck Splines是unity任何游戏的终极样条解决方案,只需点击几下,即可创建和编辑样条线...

    Unity 插件-Curvy Splines 8 8.7.3

    Unity 插件-Curvy Splines 8 8.7.3 最新版本!!!!! 它功能强大且多用途。这个工具可以用于各种任务,如物体移动、放置、变形、生成等。它具有很好的文档记录,易于扩展,自2013年以来一直获得5星评价,并提供...

    Dreamteck Splines 3.0.3.unitypackage Unity划线生成器

    一、Dreamteck Splines核心功能解析 1. **灵活的曲线编辑**:Dreamteck Splines允许用户通过直观的界面创建和编辑贝塞尔曲线。用户可以添加、移动、旋转和缩放控制点,以达到所需的形状和路径。此外,曲线支持自由...

    T-Splines 4.0完美汉化版Rhino犀牛中文插件T-Splines 4.0 for Rhino 5 一键安装汉化

    T-Splines是犀牛(rhino)的插件之一,主要功能是基于多边形实现建模操作,可用于生物、动物等有机体建模。这里小编给大家带来汉化版的T Splines,用起来更方便、简单。需要的朋友试试吧! T-Splines 4.0 功能特点小编...

    t-splines汉化破解版

    T-splines, 作为NURBS细分形式补充的新建模方式, 是由T-Splines公司领导开发的一种全新建模技术,它结合了Nurbs和细分表面建模技术的特点,虽然和Nurbs很相似,不过它极大地减少了模型表面上的控制点数目,可以进行...

    Curvy Splines 7.1.4.zip

    在游戏开发和3D可视化设计中,曲线插值是一种常见的技术,它用于创建平滑连续的路径,广泛应用于角色动画、场景布局、游戏物体运动轨迹等方面。Curvy Splines是一款专为Unity引擎设计的插件,其最新版本7.1.4提供了...

    Dreamteck Splines 3.0.4

    Dreamteck Splines 是一款经过实战测试的产品,数百名开发人员在制作各种游戏时都使用了该产品。我们会对它持续改进,并且每月都发布新版本。Dreamteck Splines 提供了大量高度可配置的工具和组件,可在运行时和编辑...

    t-splines4-zh.rar

    描述中的“插件”一词表明 T-Splines 是为 Rhino 添加新功能的程序模块,让设计师能够利用更先进的建模方法,特别是在设计曲线和曲面时,能更好地处理复杂的几何形状和有机形态。 标签 "rhino 插件" 明确了 T-...

    Curvy Splines v6.1.0

    Unity 插件Curvy Splines v6.1.0

    Dreamteck Splines 2.02.unitypackage

    适合于任何游戏的终极样条图解决方案。...Dreamteck Splines 是一套高效,...- 程序化基元和预设保存 - 交汇 - 导入和导出功能 - 变形状态 - 多线程 - 轻松可扩展的功能 - 大量 API 文档和用户手册。 Dreamteck Splines

    Curvy Splines - 7.1.40.unitypackage.zip

    《Curvy Splines:在Unity中的曲线路径设计与应用》 Curvy Splines是一个专为Unity游戏引擎设计的插件,版本7.1.40,它提供了强大的曲线路径创建和编辑工具,使得开发者能够在3D空间中轻松构建出复杂的曲线路径。这...

    Curvy Splines 7.1.5.unitypackage

    Curvy Splines 7.1.5.unitypackage

    Curvy Splines

    总的来说,"Curvy Splines"是Unity开发中一个强大的工具,它使得路径规划和对象移动变得更加简单,有助于提升开发效率,让开发者能够更专注于游戏的创意和体验设计。无论是初学者还是经验丰富的开发者,都能从中受益...

    A Practical Guide to Splines

    在这篇文章的指导下,Matlab中各种插值函数得以开发和完善,使得Matlab在科学计算和工程实践中处理插值问题时具备了强有力的工具。文章的出处是一个系列著作《应用数学科学》,它的编辑者包括数学界的知名人士,如J....

    Dreamteck Splines 2.12

    unity路径跟随动画插件 Dreamteck Splines 2.12 2021

Global site tag (gtag.js) - Google Analytics