touch

Touch

TouchDragExample:重载SpriteOnAreaTouched方法,本例不管ACTION_DOWN还是ACTION_MOVE都移动Sprite

最后注册TouchArea,并用scene.setTouchAreaBindingEnabled(true);TouchAreaPointerID绑定,这样就算多点触摸Sprite也只会跟着一个手指走。

 

MultiTouchExample: MultiTouch类可以检测当前设备是否支持多点触摸。另外引起我兴趣的是AndEngine里的Card类,封装的扑克牌类。别忘了setTouchAreaBindingEnabled(true);绑定PointerID和触摸区域。使用前engine.setTouchController(newMultiTouchController());

 

AnalogOnScreenControlExample:参照第一节

DigitalOnScreenControlExample:参照第一节

AnalogOnScreenControlsExample:参照第一节

 

CoordinateConversionExample:很有趣,不管怎么移动和旋转face,箭头永远指向face的左眼。核心就一句:finalfloat[] eyeCoordinates =this.convertLocalToSceneCoordinates(11, 13);该方法把EntityLocal坐标转换成屏幕坐标。Entity很重要,代码值得精读。至少该看一下Outline里的各种方法。

 

PinchZoomExample:实现多点缩放步骤

1. 让Activity 实现IOnSceneTouchListener负责场景背景触摸, IScrollDetectorListener, IPinchZoomDetectorListener.

2.创建  SurfaceScrollDetectorPinchZoomDetectorZoomCamera成员(本例要缩放整个场景,而不是单独的实体,单独实体用setScale缩放)。

3. onLoadEngine给引擎设置多点触摸控制器engine.setTouchController(newMultiTouchController());

4. onLoadScene初始化SurfaceScrollDetectorPinchZoomDetector,并this.mScene.setOnSceneTouchListener(this);

5.重载实现onScrollonPinchZoomStartedonPinchZoomonPinchZoomFinishedonSceneTouchEvent的处理,通过mZoomCamera.setZoomFactor实时改变ZoomFactor

 

例子里的mScene.setOnAreaTouchTraversalFrontToBack()顺序遍历注册到场景的TouchArea,还可以逆序遍历。默认是逆序的。

 

今天起学习AndEngine,看给出的例子,从零开始。

首先说明下AndEngingeExamples实例教程,入口是examples.launcher包的ExampleLaucher类,各个子例程在ExampleGroup类里能找到。

功能:在游戏主场景显示虚拟摇柄,所谓模拟摇柄是360度的,每个方向有连续的力度值。对应数字摇柄例子DigitalOnScreenControlExample类力的数字摇柄,该摇柄仅支持8个方向,每个方向只有开关两状态。

该例子用摇柄控制方块sprite运动。

1引擎的生成和资源装载:
生成摄像机: Camera(float pX, float pY, float pWidth, float pHeight)
生成场景: Engine(EngineOptions pEngineOptions)
生成贴图库 BitmapTextureAtlas(int pWidth, int pHeight, TextureOptions pTextureOptions) throws IllegalArgumentException,BitmapTextureAtlas类(Texture的子类)能将贴图直接写入显存。
生成单个贴图: BitmapTextureAtlasTextureRegionFactory.createFromAsset(BitmapTextureAtlas pBitmapTextureAtlas, Context pContext, String pAssetPath, int pTexturePositionX, int pTexturePositionY)
BitmapTextureAtlas构造的时候前2个参数意义是划出 pWidth* pHeight大小的一块空间用来存储 createFromAsset装载的贴图。 createFromAsset的后两个参数便是在这块空间里的左上角坐标。
2场景
Entity.attachChild(IEntity pEntity) throws IllegalStateException向Entity关联子结点后,可以一次调用多个子结点更新。
PhysicsHandler:处理实体的匀速,加速,角速度状态的更新
registerUpdateHandler(IUpdateHandler pUpdateHandler):为实体注册一个Handler
AnalogOnScreenControl:模拟摇柄类,两个贴图绘成:摇把和底座。绘制方式可自定义透明度,缩放等等
Scene.setChildScene(Scene pChildScene)场景力加入子场景,这里把摇柄当成子场景在背景上绘制。

DigitalOnScreenControl与模拟摇柄例子大同小异。就差DigitalOnScreenControl类不同。AnalogOnScreenControlsExample是支持两个模拟摇柄的例子,一个控制平移,一个控制旋转
-----------------------------------------------------------------
关于创建纹理贴图时的选项TextureOptions涉及到openGL知识,这里粗浅地了解一下。

纹理过滤

    将纹理映射到多边形上, 实际上是将纹理的图像数据空间映射到帧缓冲图像空间上。所以, 你必须保证纹理图像加载完成。 纹理图像被映射到多边形上可能会造成失真。纹理图像映射到多边形上去,屏幕上的一个点可能是纹理点的一个部分(如果视口设置的离纹理很近), 也有可能屏幕上的一个像素点是多个纹理的集合(如果视口设置的足够远).纹理过滤就是告诉 OpenGL 在纹理到屏幕像素点的映射中如何计算最终显示的图像数据。

    在纹理过滤中, 放大器处理一个屏幕像素点代表一个纹理点的一部分的情况;缩小器处理一个像素点代表多个纹理点的情况你可以通过下面函数来告诉 OpenGL 怎样处理这两种情况:

void glTexParameter{if}(GLenum target, GLenum pname, T param);

void glTexParameter{if}v(GLenum target, GLenum pname, T params);

   

glTexParameter 不仅仅设置放大器和缩小器, 在本章中,由于只涉及纹理,所以只讨论纹理相关的参数取值.

   参数 target 指的是纹理目标, 可以是 GL_TEXTURE_1D, GL_TEXTURE_2D*, GL_TEXTURE_3D  GL_TEXTURE_CUBE_MAP  指定纹理放大过滤器需要指定参数 pname GL_TEXTURE_MAG_FILTER指定纹理缩小过滤器需要指定参数 pname  GL_TEXTURE_MIN_FILTER.

当指定为 GL_TEXTURE_MAG_FILTER参数 param 取值 GL_NEAREST  GL_LINEAR对放大过滤器而言, 使用 GL_NEAREST 将告诉 OpenGL 使用离像素点中心最近的纹理来渲染这被称作 点样point sampling); 使用 GL_LINEAR 告诉 OpenGL 会使用离像素点中心最近的四个纹理的平均值来渲染这被称作 双线性过滤bilinear filtering)

缩小过滤器比放大过滤器的取值更广, 下表是指定缩小过滤器时, 参数 param 的取值, 下面表中的值是为了增强渲染质量。

过滤参数

注解

GL_NEAREST

使用像素点中心最近的点渲染

GL_LINEAR

使用双线性过滤

GL_NEAREST_MIPMAP_NEAREST

  

GL_NEAREST_MIPMAP_LINEAR

  

GL_LINEAR_MIPMAP_NEAREST

  

GL_LINEAR_MIPMAP_LINEAR

  

缩小过滤器的参数

    在缩小过滤器中, 4个参数处理mipmap 这将会在后面的mipmap部分讲解。

默认情况下, 放大过滤器的参数为 GL_LINEAR缩小过滤器为 GL_NEAREST_MIPMAP_LINEAR.

在渲染纹理时, OpenGL 会先检查当前的纹理是否加载完成,同时也会处理其他事情,如在选用缩小过滤器的mipmap处理时会验证mipmap的所有级别是否被定义。 如果纹理未完成, 纹理会被禁用。因为缩小过滤器的缺省值使用mipmap,所以你必须指定所有的mipmap级别或是将缩小过滤器的参数设为 *GL\_LINEAR* *GL\_NEAREST*.

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值