SurfaceView的了解

核心的类

1 SurfaceView 展示电影的屏幕

内部双缓冲机制 显示界面的效率非常快   对内存和cpu的开销非常大的(当不可见的时候,回收)

A   加载数据  显示界面
B   显示界面  加载数据 

2 SurfaceHolder 展示电影的内容

3 Thread 工作人员

需要满足两个条件 1. 在surfaceCreated之后创建, 在surfaceDestroyed 销毁

如何绘制界面

  1. 如何获取到Surface
  2. SurfaceVIew里面 获取不到Surface 但是能够获取到SurfaceHolder ,看看SurfaceHolder能否获取到Surface
  3. 拿到Surface以后 需要了解如何去绘制界面
  4. 由于SurfaceHolder已经具备Surface的功能了 ,所以就可以直接通过SurfaceHolder 去实现了

Surface

  1. lockCanvas 锁定画布 获取到一个画布 绘制界面了
  2. 绘制界面
  3. unlockCanvasAndPost 解锁画布提交

SurfaceHolder

里面具备了和Surface一样的方法 也可以锁定画布 解锁画布
其实SurfaceHolder 里面的就是通过Surface实现的

面向对象

把看到的事物 都封装成一个对象

Cocos2D

1 线程什么时候开启的
2. 注意 fps_images.png 图片放到asets目录下

CCDirector

  1. attachInView 开启线程
  2. runWithScene 运行场景
  3. 生命周期的方法 resume pause end
  4. setDisplayFPS 显示帧率
  5. setScreenSize 设置屏幕大小 自动屏幕适配
  6. setDeviceOrientation 设置屏幕的方向

CCScene

目前该类没有什么具体的功能,它只是作为一个项目中需要展示内容的根节点存在。

CCLayer

处理触摸事件
1. this.convertTouchToNodeSpace(event); 先把android坐标系中的点 转换成 cocos2d坐标系中的点

CCSprite

  1. setAnchorPoint 设置锚点
  2. setPosition 设置坐标
  3. setScale 设置缩放
  4. setFlipX(Y) 设置水平(垂直)翻转
  5. ccSprite.setOpacity(150); 设置不透明度 值越大越不透明
  6. setVisible 设置是否可见 true可见

CCNode

是 场景 图层 和精灵的基类

    • ccp(float x,float y) 静态方法 创建一个点
  1. this.addChild(ccSprite);
  2. this.addChild(ccSprite, z); // 2 优先级
  3. this.addChild(ccSprite, 1, 10);// 参数3 标签

动作的处理 CCAction

  1. CCFiniteTimeAction 和时间相关的动作

    CCInstantAction 瞬时动作 闪现
    CCIntervalAction 延迟动作 疾跑

  2. CCFollow 跟随动作

  3. CCRepeatForever 永不停止的循环
  4. CCSpeed 和速度相关的动作

MoveTo和MoveBy动作的区别

  1. to 移动到指定目的地
  2. by 移动的坐标的改变

  3. to没有相反的动作

  4. by 有相反动作

CCSequence 串行动作

CCSequence sequence=CCSequence.actions(ccJumpBy, reverse);

CCRepeatForever 永不停止的循环

Tintby

private void tint() {
    // 专门显示文字的精灵 
    //  参数1  显示的内容 参数2 字体的样式  3 字体的大小
    CCLabel label=CCLabel.labelWithString("那些年,我们追过的女孩", "hkbd.ttf", 24);
    label.setColor(ccc3(50, 0, 255));
    label.setPosition(200,200);
    this.addChild(label);

    ccColor3B c=ccc3(100, 255, -100);
    // 参数1 时间 参数2 变化后的颜色 
    CCTintBy by=CCTintBy.action(1, c);
    CCTintBy reverse = by.reverse();
    CCSequence actions = CCSequence.actions(by, reverse);
    CCRepeatForever forever=CCRepeatForever.action(actions);
    label.runAction(forever);
}

复杂的动作

  1. CCSpawn 并行动作
  2. CCSequence 串行动作
  3. CCRepeatForever 永不停止的循环

    private void JumpBy() {
        // 1 时间  单位秒 2 目的地   3 高出的高度  4 跳跃的次数
        CCJumpBy ccJumpBy=CCJumpBy.action(4, ccp(200, 100), 100, 2);
        CCRotateBy ccRotateBy=CCRotateBy.action(2, 360);
        // 并行动作
        CCSpawn ccSpawn=CCSpawn.actions(ccJumpBy, ccRotateBy);//并行起来了   跳跃的过程中伴随着旋转
    
        //CCJumpBy reverse = ccJumpBy.reverse();
        CCSequence sequence=CCSequence.actions(ccSpawn, ccSpawn.reverse());// 跳上去 跳回来(伴随着旋转) 
        CCRepeatForever forever=CCRepeatForever.action(sequence);// 让串行动作 永不停止循环了
        CCSprite sprite = getSprite();
        sprite.setAnchorPoint(0.5f, 0.5f);  
        sprite.setPosition(50, 50);
        sprite.runAction(forever);
    }
    

猜你喜欢

转载自blog.csdn.net/qq_17336559/article/details/49968457