UML设计,可以设计程序的用例图、类图、活动图等_SurfaceView

? 对Cocos2d游戏引擎有一定的了解和实践,并接触过处理3D图形和模型库的OpenGL

在进行游戏界面的绘制工作中,需要处理大量的工作,这些工作有很多共性的操作;并且对于游戏界面的切换,元素动作的处理,都已经有人做好了这些工作,并将其封装到框架中,其中Cocos2d-android就是这样一个框架。

Cocos2d实现游戏的绘制:

1、实现步骤:

首先来说,要想绘制出游戏界面,按照谷歌文档中的说明,需要实现两步操作:

①、所有的SurfaceView和SurfaceHolder.Callback,被UI Thread调用

也就是说需要接收用户的操作

②、确保所绘制的进程是有效的:

就要调用SurfaceHolder.Callback中的创建方法creat被调用和销毁方法destroy被调用

2、具体的实现:

1)、Cocos2d中有CCGLSurfaceView这个类,是继承于SurfaceView的,并实现了SurfaceHolder.Callback的接口。创建出这个对象,就有了绘制游戏界面的容器。

2)、绘制容器中的画面和元素,还要接受用户的操作;就需要将绘制的操作放在一个子线程中执行,UI Thread这个线程接收用户的操作;通过GLThread这个类实现不断的绘制界面的操作。

GLThread绘制线程的实现:

①、复写了run方法,在run方法中调用了GLThread自己的run方法:guardedRun

此方法中,通过while(true)不停的绘制,其中有相应的标记进行控制

绘制的方法:mRenderer.onDrawFrame(gl);【绘制一帧】

【void org.cocos2d.opengl.GLSurfaceView.Renderer.onDrawFrame(GL10 gl)】

②、Canvas和GL10这个接口如何进行处理绘制的:

在Canvas中,Bitmap和GL是互斥的,一个为null,另一个必须不为null

Cocos2d底层用到的是OpenGL的信息,所以方法中传递的是gl的接口

③、GLThread的开启:

@、在GLSurfaceView中的setRenderer方法中开启的:

mGLThread = new GLThread(renderer);

mGLThread.start();

@、在CCDirector(继承了GLSurfaceView.Renderer)的initOpenGLViewWithView方法中调用了setRenderer

@、的调用是由attachInView(View view)方法返回的

最终是由导演CCDirector进行调用,这是导演的第一个工作,

attachInView(View view)的作用是将导演和SurfaceView进行绑定,绑定时,将绘制线程开启起来

(3)由此,大致过程如下:

①、创建出CCGLSurfaceView(即对应的SurfaceView),设置显示setContentView(surfaceView)

②、紧随其后,创建出导演CCDirector【通过单例获取:director=CCDirector.sharedDirector();】

③、通过调用导演中的attachInView(surfaceView),传入surfaceView:

这样就建立了CCDirector和SurfaceView之间的关系

并且还开启了绘制线程,进行绘制:

attachInView(View view)方法调用了initOpenGLViewWithView方法【都是导演中的方法】

initOpenGLViewWithView方法调用了setRenderer【开启绘制线程用的】

在setRenderer中创建了绘制线程,并开启起来

mGLThread = new GLThread(renderer);

mGLThread.start();

3、界面元素的展示:

上面的操作只是创建出界面,可以不断绘制界面中的内容,要想丰富界面,就需要添加元素到界面中。

Cocos2的架构:

①、Cocos2D Graphic图形引擎②、CocosDenshion Audio声音引擎③、物理引擎④、Lua脚本库

其中对于图形引擎,在Cocos2d中,绘制游戏就相当于在拍电影

由导演类CCDirector控制这个游戏元素的展现和消失;其中还包括场景类CCScene和精灵类CCSprite

说明:

1)CCDirector(导演):

引擎的控制者,控制场景的切换,游戏引擎属性的设置 【管理整棵大树】

2)CCScene (场景):场景类

例如游戏的闪屏,主菜单,游戏主界面等。
【类似于树根,树干】

3)CCLayer(布景):图层类

每个图层都有自己的触发事件,该事件只能对其拥有的元素有效,而图层之上的元素所包含的元素,是不受其事件管理的【类似于树枝】

4)CCSprite(人物):精灵类,

界面上显示的最小单元【类似于树叶】

5)CCNode:

引擎中最重要的元素,所有可以被绘制的东西都是派生于此。它可以包含其它CCNode,可以执行定时器操作,可以执行CCAction。

CCScene,CCLayer,CCSprite的父类

6)CCAction(动作):动作类

如平移、缩放、旋转等动作

示例代码:

public
class MainActivity extends Activity {

       private CCDirector director;

       @Override

       protected void onCreate(Bundle
savedInstanceState) {

              super.onCreate(savedInstanceState);

              //创建surfaceView

              CCGLSurfaceView surfaceView = new
CCGLSurfaceView(this);

              setContentView(surfaceView);

              //创建导演

              director =
CCDirector.sharedDirector();

              /*    设置相关参数

               */

              //横屏显示

              director.setDeviceOrientation(CCDirector.kCCDeviceOrientationLandscapeLeft);

              //设置屏幕大小

              director.setScreenSize(480, 320);

              //显示帧率

              director.setDisplayFPS(true);

             

              //①建立CCDirector和SurfaceView之间的关系;开启绘制线程

              director.attachInView(surfaceView);

              /*

               * 管理显示内容

               */

              //创建场景

              CCScene scene = CCScene.node();

//            FirstLayer layer = new FirstLayer();

//            ActionLayer layer = new
ActionLayer();

              DemoLayer layer = new DemoLayer();

              //添加场景中的layer

              scene.addChild(layer);

              director.runWithScene(scene);

       }

      

       @Override

       protected void onResume() {

              director.onResume();

              super.onResume();

       }

      

       @Override

       protected void onPause() {

              director.onPause();

              super.onPause();

       }

      

       @Override

       protected void onDestroy() {

              director.end();

              super.onDestroy();

       }

}

public
class FirstLayer extends CCLayer {

      

       private static final String TAG =
"FristLayer";

       private int count;

       public FirstLayer(){

              // 一个场景里面只能有一个layer可以处理用户的Touch

              this.setIsTouchEnabled(true);

              count = 0;

              init();

             

       }

 

       /*

        * 初始化

        * 展示精灵并实现动画

        */

       private void init() {

              //创建精灵

              CCSprite sprite =
CCSprite.sprite("z_1_01.png");

              this.addChild(sprite);

              sprite.setAnchorPoint(0, 0);

             

              CCSprite spritex =
CCSprite.sprite("z_1_01.png");

              spritex.setFlipX(true);

              spritex.setAnchorPoint(0, 0);

              spritex.setPosition(100, 0);

              this.addChild(spritex, 0, 10);

             

              CCSprite spritey =
CCSprite.sprite("z_1_01.png");

              spritey.setFlipY(true);

              spritey.setAnchorPoint(0, 0);

              spritey.setPosition(0, 100);

              this.addChild(spritey);

             

       }

      

       @Override

       public boolean ccTouchesBegan(MotionEvent
event) {

              // 坐标转换:将MotionEvent封装的手机屏幕坐标系的坐标信息转换成Cocos2D的坐标系

              CGPoint touchPos=
this.convertTouchToNodeSpace(event);

              CCSprite sprite = (CCSprite)
this.getChildByTag(10);

              boolean containsPoint =
CGRect.containsPoint(sprite.getBoundingBox(), touchPos);

              if(containsPoint){

//                   sprite.setOpacity(new
Random().nextInt(255));

//                   count++;

//                   sprite.setVertexZ(1.0f+count);//最大132

//                   Log.i(TAG,
"count=="+count);

                     //移除精灵

//                   sprite.removeSelf();

                     //隐藏精灵

                     sprite.setVisible(false);

                     /*

                      * Tips:此处不能使用sprite.removeSelf();

                      * 否则在第二次点击的时候,就会挂掉,因为再次点击的时候,精灵已经从layer中移除出去了

                      */

              }

             

              return
super.ccTouchesBegan(event);

       }

}

时间: 2024-10-29 10:46:18

UML设计,可以设计程序的用例图、类图、活动图等_SurfaceView的相关文章

设计模式1 UML基本使用 用例图,类图(关联依赖聚合组合),时序图,活动图,包图,组件图,

StartUML下载 http://staruml.io/ 1,基本使用 用例图: 保存为图片: 泛化关系图: 包含于扩展图: 人事管理系统图:

UML实践详细经典教程----用例图、顺序图、状态图、类图、包图、协作图

面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling Language™),这篇课程的目的是展示出UML的精彩之处. UML中有九种建模的图标,即: 用例图 类图 对象图 顺序图 协作图 状态图 活动图 组件图 配置图 本课程中的某些部分包含了这些图的细节信息的页面链接.而且每个部分都有一个小问题,测试一下你对这个部分的理解. 为什么UML很重要? 为了回答这个问题,我们看看建筑行业.设计师设计出房子

最常用的UML图包括:用例图、类图、序列图、状态图、活动图、组件图和部署图

(转) 用例图 用例图描述了系统提供的一个功能单元.用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求,包括基于基本流程的"角色" (actors,也就是与系统交互的其他实体)关系,以及系统内用例之间的关系.用例图一般表示出用例的组织关系--要么是整个系统的全部用例,要么是完 成具有功能(例如,所有安全管理相关的用例)的一组用例.要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位 置.要在用例图上绘制一个角色(表示一个系统用户),

第三视角团队:项目UML设计(团队)

项目UML设计(团队) 团队信息 团队名:第三视角 各成员学号及姓名 姓名 学号 张扬(组长) 031602345 肖地秀 031602336 朱文婧 031602148 洪泽波 031602312 郑愈明 031602147 陈加伟 031602631 苏韫月 031602204 郭俊彦 031602213 李翔 031602418 王全炯 031602331 组长作业博客链接 本次作业链接 团队分工(10分) 成员负责事务 | | | | | ---- | ---- | ---- | | |

UML 用例图,时序图,活动图的定义以及区别

1.用例图,时序图,活动图的定义 1.用例图: 用例图描述了系统提供的一个功能单元.用例图的主要目的是帮助开发团队以一种可视化的方式理解系统的功能需求,包括基于基本流程的"角色"(actors,也就是与系统交互的其他实体)关系,以及系统内用例之间的关系.用例图一般表示出用例的组织关系--要么是整个系统的全部用例,要么是完成具有功能(例如,所有安全管理相关的用例)的一组用例.要在用例图上显示某个用例,可绘制一个椭圆,然后将用例的名称放在椭圆的中心或椭圆下面的中间位置.要在用例图上绘制一个

UML状态图和活动图

UML状态图和活动图 统一建模语言UML(Unified Modeling Language)是非专利的第三代建模和规约语言.UML是一种开放的方法,用于说明.可视化.构建和编写一个正在开发的.面向对象的.软件密集系统的制品的开放方法.UML展现了一系列最佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已经被验证有效. UML定义了5类,10种模型图: 1.用例图:从用户角度描述系统功能,并指各功能的操作者.2.静态图:包括类图,包图,对象图.   类图:描述系统中

UML-状态图,顺序图,活动图

一.编写用例文档 1.用例的内容:   用例编号   用例名  执行者  前置条件  后置条件  基本路径  扩展路径  字段列表  业务规则 非功能需求  设计约束 前置条件必须是系统能够检测到的   必须是系统在用例开始前就能检测到的. 基本路径注意点:  1. 不要有太多专业术语 2.使用主动语句    3.句子以系统或者执行者作为主语 4.每一句要向目标迈进(比如:用户输入个人信息,个人信息参见字段列表) 5.分支和循环   (使用扩展路径)  6.不要涉及界面细节 检查用例模型    

UML 活动图

内容路线 •活动图概述 活动图概述 •活动图和交互图是UML中对系统动态方面建模的两种主要形式 •交互图强调的是对象到对象的控制流,而活动图则强调的是从活动到活动的控制流 •活动图是一种表述过程基理.业务过程以及工作流的技术.它可以用来对业务过程.工作流建模,也可以对用例实现甚至是程序实现来建模 •UML 2.0而言,去除了“活动图是状态图的一种特例”这一规定 •如何阅读活动图 阅读简单活动图 活动图的主要元素 •初始节点和活动终点:用一个实心圆表示初始节点,用一个圆圈内加一个实心圆来表示活动终

<十五>UML核心视图动态视图之活动图

一:动态视图 --->动态视图是描述事物动态行为的. --->需要注意的是:动态视图不能够独立存在,它必需特指一个静态视图活uml元素,说明在静态视图规定的事物结构下它们的动态行为. --->动态视图:活动图,状态图,时序图,协作图 二:活动图 --->活动图描述了为了完成某一个目标需要做的活动以及这些活动的执行顺序. --->uml中有两个层面的活动图,一种用于描述用例场景,叫[用例活动图],另一种用于描述对象交互,叫[对象活动图]. --->在面向对象的眼中是没有业

浅谈UML学习笔记动态图之状态图和活动图

Trufun Plato Trufun Plato是新一代的UML建模软件,它将为您的软件分析设计提供高效快捷的建模工具.Trufun是在OMG发布UML2.2规范之后同步发布UML2.X工具的CASE工具厂商,是基于全新理念的.中国人自己的先进的企业级UML工具.   原文转自trufun.net网站,更多UML资料和项目模型,可以到网站下载. 状态图 我先简单的理解一下,什么是状态机?① 在日常生活中,状态机,我们理解为记录下给定时刻状态的机器,根据不同的输入对每个给定的变化而改变其状态或引