`
hereson
  • 浏览: 1451307 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

Rectangle对象在游戏开发中的应用

阅读更多

一直知道在flash.geos包里面有一个Rectangle对象却很少用过。无意中试用了一下发现可用的地方还很广。所以一冲动把现在的项目中的很多地方都改成了Rectangle判断了。

应用一:屏幕滚屏

滚屏是游戏中最常做的一项工作,一般的思路是map.x++ map.y++,然后随时判断map是否走到了头。

下面的代码中我用了一张4000*4000的图片来说明两种方式:

一般的做法如下:判断每一步是否超过边界如果超过边界则等于边界。

var map:Loader=new Loader(); //地图容器
var speed:int=7; //移动速度

map.load (new URLRequest("2.jpg"));
map.contentLoaderInfo.addEventListener (Event.COMPLETE,oncomplete);
addChild (map);

function oncomplete (evt:Event)
{
  stage.addEventListener (KeyboardEvent.KEY_DOWN,onkeydown);
}
function onkeydown2(evt:KeyboardEvent)
{
switch (evt.keyCode)
{
  case Keyboard.LEFT :
    if (map.x+7<0) map.x+=7;
      else map.x=0;
     break;
    case Keyboard.RIGHT :
     if (map.x-7>stage.stageWidth-map.width)   map.x-=7;
      else map.x=stage.stageWidth-map.width
     break;
  case Keyboard.UP :
     if (map.y+7<0) map.y+=7;
      else map.y=0;
     break;
  case Keyboard.DOWN :
     if (map.y-7>stage.stageHeight-map.height) map.y-=7;
      else map.y=stage.stageHeight-map.height
     break;
}
}

使用Rectangle的方法,见如下代码

var map:Loader=new Loader(); //地图容器
var rec:Rectangle; //当前显示区域的范围
var maxRec:Rectangle; //地图的矩形范围
var speed:int=7;

map.load (new URLRequest("2.jpg"));
map.contentLoaderInfo.addEventListener (Event.COMPLETE,oncomplete);
addChild (map);

function oncomplete (evt:Event)
{
maxRec=map.getBounds(map);//以自己的坐标系返回矩形
rec=new Rectangle(0,0,800,600);//显示的范围
map.scrollRect=rec;//确定地图的可显示范围
stage.addEventListener (KeyboardEvent.KEY_DOWN,onkeydown);
}
function onkeydown (evt:KeyboardEvent)
{
rec=map.scrollRect;
switch (evt.keyCode)
{
   case Keyboard.LEFT :
    rec.x-=7;
    break;
   case Keyboard.RIGHT :
    rec.x+=7;
    break;
   case Keyboard.UP :
    rec.y-=7;
    break;
   case Keyboard.DOWN :
    rec.y+=7;
    break;
}
if(rec.x<0) rec.x=0;
else if(rec.x>maxRec.width-rec.width) rec.x=maxRec.width-rec.width;
if(rec.y<0) rec.y=0;
else if(rec.y>maxRec.height-rec.height) rec.y=maxRec.height-rec.height;
//if(maxRec.containsRect(rec)) 如果你无需十分精确可以关闭以上4行,把这一句打开
map.scrollRect=rec;

}

两种方式的比较:效率上相差不大,不过使用Rectangel的好处是利用显示对象的scrollRect属性可以把区域之外的内容不显示出来。

注意事项:scrollRect的增量方向正好与物体的相反,可以想象为一个是移动物体,一个是移动屏幕。

应用二:找出屏幕外围的显示对象。

基本思路:将Rectangle对象的坐标系设置为屏幕坐标系,利用DisplayObject.getBounds(stage)返回其他物体在屏幕坐标系中的位置,然后利用Rectangle对象的相交测试方法检测(有点类似于碰撞检测)

以下是一个例子

var rec:Rectangle = new Rectangle(0, 0, ShareData.SCENEWIDTH, ShareData.SCENEHEIGHT);
    for (var i = 0; i < gameContainer.numChildren; i++)
    {
     var build = gameContainer.getChildAt(i);
     if(build.getBounds(stage).intersects(rec))
     {
      build.visible = true;
      ShareData.visualList[build.name]=build;
     }
     else
     {
      build.visible = false;
      if(ShareData.visualList[build]!=null)
      delete ShareData.visualList[build];
     }
    }

总结:虽然并没有测试这样所带来的效率,但是会有很多地方可以为我们的判断带来很大的方便

分享到:
评论

相关推荐

    Qt Qml 可拖动设置Rectangle大小Demo

    在我们的示例中,Rectangle将作为可调整大小的对象。 要使Rectangle可拖动并改变大小,我们需要添加几个关键组件和功能: 1. **MouseArea**:这是Qml中的一个组件,允许我们监听鼠标的事件,如按下、移动和释放。...

    C# Rectangle基本用法和图片切割源码

    在C#编程语言中,`Rectangle`类是用于表示二维矩形区域的重要工具,它广泛应用于图形绘制、图像处理和游戏开发等领域。本教程将深入探讨`Rectangle`的基本用法,以及如何使用C#进行图片切割操作。我们将通过实例代码...

    Rectangle 类的VC++程序源码

    这个“Rectangle 类的VC++程序源码”是一个基础的编程练习,旨在帮助初学者理解面向对象编程(OOP)的核心概念,特别是类和对象在C++中的应用。以下是对这个练习涉及的知识点的详细解释: 1. **类(Class)**:在C++...

    Rectangle 矩形求面积 c++

    在实际的软件开发中,这种模式被广泛应用于各种复杂的问题,例如图形界面设计、游戏开发、数据结构等。 在北邮的C++实验课程中,类似的编程练习可以帮助学生巩固基本的C++语法,如变量声明、函数定义、输入/输出...

    面向对象设计模式应用+绘制类图+Java语言实现任务中的模式设计。

    )一个软件团队开发绘图系统,设计了圆对象(Circle)、矩形对象(Rectangle)、线对象(Line)都支持Draw()函数,即可以通过Draw()函数绘制图形。为了加快项目进度,将角度对象(Angle)绘制功能交给了合作团队...

    Rectangle_#1_卫图.rar

    “3dmax”是一款流行的三维建模、动画和渲染软件,常用于电影特效、建筑设计、游戏开发等领域。用户可以将高程数据和卫星图导入3dmax,结合obj格式的文件来构建地形模型。Obj是一种通用的3D模型文件格式,它能存储...

    Actionscript3.0开发的射击小游戏

    本项目——“三角也疯狂”,就是一个基于ActionScript3.0开发的射击小游戏,展示了ActionScript3.0在游戏开发中的应用。 1. **ActionScript3.0基础知识**: - AS3.0是ActionScript的重大升级,引入了强类型、面向...

    利用gameloop开发简单第一个小游戏

    在本文中,我们将深入探讨如何使用Gameloop框架在Silverlight Beta2环境下开发你的第一个小游戏。Silverlight,作为微软推出的一个强大的RIA(Rich Internet Application)平台,曾广泛应用于创建交互式网页内容,...

    Rectangle Packer

    在2D游戏开发中,这通常表现为将多个小图片合并到一张大的纹理图上,以减少内存占用和渲染开销。 2. **矩形打包器的算法种类** - **First Fit**:是最简单的策略,将每个矩形按顺序尝试放入第一个足够大的空间。 ...

    C#小游戏星际飞机

    下面我们将深入探讨C#在游戏开发中的应用以及Graphics类在图形绘制中的作用。 C#是一种广泛应用于Windows桌面应用、Web应用以及游戏开发的语言,由微软公司推出。在C#中,Windows Forms是创建图形用户界面(GUI)的...

    用visual c++开发的贪吃蛇游戏

    在IT领域,游戏开发始终是热门且充满挑战的分支之一,尤其对于初学者而言,通过一个具体的游戏项目来学习编程语言和技术,往往能更有效地掌握和应用所学知识。"用Visual C++开发的贪吃蛇游戏"这一主题,不仅涉及了...

    C#-矩形-Rectangle

    这个类在System.Drawing命名空间下,常被用于图形绘制、游戏开发或任何需要处理几何形状的应用中。`Rectangle`类提供了丰富的属性、方法和构造函数来创建、操作和查询矩形对象。 一、`Rectangle`类的属性 1. `X`和`...

    基于C#开发的图像绘制、Canvas绘图及图片处理应用开发

    在IT行业中,C#是一种广泛使用的编程语言,尤其在Windows应用程序和游戏开发中。本教程主要聚焦于使用C#进行图像绘制与处理,利用Canvas这一强大的绘图工具,实现多种图形操作和效果。 首先,我们要了解Canvas是WPF...

    Java手机游戏开发

    在IT行业中,Java语言因其跨平台的特性,广泛应用于手机游戏开发。本教程将深入探讨如何使用Java进行手机游戏开发,以"超级玛丽"这款经典游戏为例,为开发者提供一个实践学习的平台。 首先,我们要了解Java游戏开发...

    C# 游戏开发 汽车躲避

    在C#游戏开发中,"汽车躲避"是一个典型的2D动作游戏,玩家...通过对源代码的分析和学习,我们可以深入理解C#在游戏开发中的应用,以及如何构建一个简单的2D动作游戏。同时,这也是提升编程技巧和游戏设计能力的好机会。

    Ubuntu应用开发

    在Ubuntu应用开发中,QML被广泛应用于构建动态且响应式的用户界面。 ##### 3.1 QML结构 QML使用一种声明式的语法,通过定义对象及其属性来描述用户界面。例如,下面的代码展示了如何使用QML定义一个矩形: ```qml...

    iText中文开发手册

    iText中文开发手册 iText是java语言中的一种PDF生成工具,它可以帮助开发者快速生成PDF文件。在这篇手册中,我们将详细介绍iText的使用方法,并提供一些实用的代码示例。 第一部分:iText的简单应用 在这一部分中...

Global site tag (gtag.js) - Google Analytics