【v2.xOGE-example第一节】绘制实体前言:

OGE即OGEngine,是由橙子游戏开发的基于Java支持跨平台的开源游戏引,从12年4月项目成立至今已经有2年多的发展历程。在此期间基于OGEngine开发的项目已经有很多成功投放市场。从正式开源开始,好多开发者开始加入OGEngine的行列,同时在官网、论坛、Q群、看到有好多的问题,大部分是一些新手的问题,经常会被重复的提问。有些是之前用过AndEngine的,对OGEngine的使用会有些出入,开发时不是很顺手。为此今天开始写一个OGE-Example;大家在学习OGEengine时可参考这些例子,应该会更容易上手些。

正文:

首先,先讲解一下这个OGE-example的思路框架,这些案例都会放到一个项目里,用list显示,会分两级菜单,从最简单开始,后续会随着引擎的发展在加入一些例子,也都会放在这个项目里边,方便大家学习和使用。

一、导入OGE-example注意事项:

1.先学习想要运行平台下的环境搭建android搭建:http://dev.ogengine.com/forum.php?mod=viewthread&tid=629&extra=page%3D1,或ios搭建:http://dev.ogengine.com/forum.php?mod=viewthread&tid=631&extra=page%3D1;

2.OGE-example项目现支持两个平台运行(android和ios),这些案例会用到一些图片和字

体,需要把这些资源加载到对应的启动器里边(android和ios启动器);

放在Android启动器下:

放在IOS启动器下:

OGE-example项目结构:

第一章第一节:实体的绘制1.位置:Drawing_example-->DrawingSprite2.类名:DrawingSprite

(1)绘制线条:

线条Line:Line(floatpX1,floatpY1,floatpX2,floatpY2,floatpLineWidth,VertexBufferObjectManagerpVertexBufferObjectManager)

pX1,pY1线条起点位置

pX2,pY1线条终点位置

pLineWidth:线条宽度

setColor(floatpRed,floatpGreen,floatpBlue)线条颜色

pRed红色

pGreen绿色

pBlue蓝色

颜色值最小是0最大是1,平时输入具体的颜色值可以这样输入setColor(204/255,4/255,201/255)

VertexBufferObjectManager顶点缓存对象管理

/**

*画出100条直线,位置、颜色随机

*/

privatevoiddrawingLine(){

finallongRANDOM_SEED=1234567890;//随机数种子

finalRandomrandom=newRandom(RANDOM_SEED);

for(inti=0;i<100;i++){

finalfloatx1=random.nextFloat()*300;//线x起点随机0-300

finalfloatx2=random.nextFloat()*300;//线x终点随机0-300

finalfloaty1=random.nextFloat()*480;//线y起点随机0-480

finalfloaty2=random.nextFloat()*480;//线y终点随机0-480

finalfloatlineWidth=random.nextFloat()*5;//线的宽度随机0-5

finalLineline=newLine(x1,y1,x2,y2,lineWidth,

getVertexBufferObjectManager());//画线

line.setColor(random.nextFloat(),random.nextFloat(),

random.nextFloat());//设置颜色值范围0-1

this.attachChild(line);//加入本场景实体只有加入场景后才会被绘制和更新状态

}

}(2).绘制矩形

矩形:Rectangle(floatpX,floatpY,floatpWidth,floatpHeight,VertexBufferObjectManagerpVertexBufferObjectManager)

pX,pY矩形位置

pWidth,pHeight矩形宽高

VertexBufferObjectManager顶点缓存对象管理

/**

*画出4个矩形

*/

privatevoiddrawingRectangle(){

//红色矩形

Rectanglerectangle0=newRectangle(300,120,100,100,

getVertexBufferObjectManager());//绘制矩形,位置x300,位置y120,宽100,高100

rectangle0.setColor(1,0,0);//设置为红色红Red:1即255/255

this.attachChild(rectangle0);//加入本场景实体只有加入场景后才会被绘制和更新状态

//绿色矩形

Rectanglerectangle1=newRectangle(400,120,100,100,

getVertexBufferObjectManager());//绘制矩形,位置x400,位置y120,宽100,高100

rectangle1.setColor(0,1,0);//设置为绿色绿Green:1

this.attachChild(rectangle1);//加入本场景实体只有加入场景后才会被绘制和更新状态

//蓝色矩形

Rectanglerectangle2=newRectangle(300,220,100,100,

getVertexBufferObjectManager());//绘制矩形,位置x300,位置y220,宽100,高100

rectangle2.setColor(0,0,1);//设置为蓝色蓝Blue:1

this.attachChild(rectangle2);//加入本场景实体只有加入场景后才会被绘制和更新状态

//***矩形

Rectanglerectangle3=newRectangle(400,220,100,100,

getVertexBufferObjectManager());//绘制矩形,位置x400,位置y220,宽100,高100

rectangle3.setColor(1,1,0);//设置为红色红Red:1,绿色绿Green:1相加后为***

this.attachChild(rectangle3);//加入本场景实体只有加入场景后才会被绘制和更新状态

}

(3).画图片精灵

图片精灵AnimatedSprite(floatpX,floatpY,StringpTextureRegionName,VertexBufferObjectManagerpVertexBufferObjectManager)

pX,pY,精灵位置

pTextureRegionName图片名称

/**

*画图片精灵

*/

privatevoiddrawingPic(){

//画一个精灵

AnimatedSpritepea=newAnimatedSprite(600,30,Regions.PEA,

getVertexBufferObjectManager());//绘制一个图片精灵位置x600,位置y30,图片名称引用Regions.PEA

this.attachChild(pea);//加入本场景实体只有加入场景后才会被绘制和更新状态

}

(4).画动画精灵

动画画精灵AnimatedSprite(floatpX,floatpY,StringpTextureRegionName,VertexBufferObjectManagerpVertexBufferObjectManager)

pX,pY,精灵位置

pTextureRegionName图片名称

animate(longpFrameDurationEach)动画精灵的帧速

/**

*画飞机精灵

*/

privatevoiddrawingPlane(){

//画一个动画精灵

AnimatedSpriteplane=newAnimatedSprite(610,140,Regions.PLANE,

getVertexBufferObjectManager());//绘制动画精灵,位置x610,位置y140,图片名称引用Regions.PLANE

this.attachChild(plane);//加入本场景实体只有加入场景后才会被绘制和更新状态

//播放帧速,每帧的持续时间,以毫秒为单位计算

plane.animate(180);

plane.setIgnoreTouch(false);//设置阻止触摸为false

}

(6).删除精灵

Entity:attachChild(IEntitypEntity);attachChild加入一个实体

detachChild(IEntitypEntity);detachChild删除一个实体

/**

*精灵删除

*/

privatevoidremovingSprite(){

ButtonSpritebtnSprite=newButtonSprite(610,200,Regions.BACK_BTN,

getVertexBufferObjectManager());//绘制一个按钮精灵位置x610,位置y200,图片名称引用Regions.BACK_BTN

this.attachChild(btnSprite);//加入本场景实体只有加入场景后才会被绘制和更新状态

btnSprite.setOnClickListener(newOnClickListener(){//注册按键监听

@Override

publicvoidonClick(ButtonSpritepButtonSprite,//响应点击

floatpTouchAreaLocalX,floatpTouchAreaLocalY){

System.out.println("detachbtnSprite");

DrawingSprite.this.detachChild(pButtonSprite);//删除实体实体删除后不在绘制和更新状态

}

});

}

}

OGE_Example项目源码