Cocos2d-android 学习笔记

Cocos2d-android 学习笔记SurfaceView nbsp getHolder SurfaceHolde 代理者代理 Surface 完成界面相关的操作 getSurfacelo unlockCanvas Canvasc 放在 finally 块中 SurfacelockC lockCanvas R

/* SurfaceView getHolder() -->SurfaceHolder SurfaceHolder 代理者 代理Surface完成界面相关的操作 getSurface lockCanvas() unlockCanvasAndPost(Canvas c) 放在finally块中 Surface lockCanvas() lockCanvas(Rect dirty) --> Canvas 锁定一个矩形区域当作画布 花东西 unlockCanvas(Canvas c) 解锁,更新界面 FPS : 帧率 >=30 性能的最低要求 Point x y CopyOnWriteList Rect contain(x,y) Cocos2d_Android CCDirector 管理场景 与SurfaceView 打交道 derived from CCDirector.sharedDirector() attachInView() 开启绘制线程 runWithScene(scene) replaceScene(scene) setDisplayFPS(true) onResume() onPause() end() setDeviceOrientation(CCDirector.kCCDiviceOrientation...) setScreenSize(x,y); 480 320 getWinSize() CCSecene derived from CCSecene.node() addChild(layer) 把树根与树枝连在一起 作为parents存在 在一个场景所以的CCLayer中,有且只有一个CCLayer可以处理touch事件 CCLayer extends CCNode implements CCTouchDelegateProtocol addChild(leaf) setScaleX() setScaleY() setScale() setIsTouchEnabled(true) 主要处理 CCTouchDelegateProtocol 里面的方法 ccTouchesBegan() 按下 ccTouchesMoved() ccTouchesCancel convertTouchToNodeSpace(MotionEvent) 坐标原点在左下角 图片的锚点 默认在图片的中心 setAnchorPoint(0,0) 坐标的计算越简单越好 图片位置的确定 结合锚点和坐标综合定位 CCSprite derived from CCSprite.sprite(filepath) assets文件夹上的图片资源 setFlipX(true) 在x轴上的镜像 setPosition(CGPoint) CGPoint deprived from CGPoint.ccp(x,y); addChild() 按照添加的顺序决定显示的优先级 默认后添加的优先级高 addChild(child,priority);priority表示在z轴的位置 addChild(child,priority,tag);priority表示在z轴的位置 getChildByTag(); getBoundingBox()-->CGRect serOpacity(0--255) setVisible() removeSelf(); runAction() stopAllActions() --CCLabel --> CCLabel.makeLable(text,font,fontsize); .ttf 放置于assets目录下 setColor(color) fps_images.png cocos2d需要的图片 所以要把这张图片放在自己的assets目录下 CCNode CGRect static containsPoint(aRect,Point) CCAction --CCFiniteTimeAction 受时间限制的动作 --CCInstantAction 瞬时当作 --CCIntervalAction 瞬时当作 --CCMoveTo derived from CCMoveTo.action(float time,CGPoint pos) --CCMoveBy derived from CCMoveBy.action(float time,CGPoint pos) 相对移动 reverse(); CCSequence CCSequence.actions(...actions) --CCJumpBy -->CCJumpBy.action(time,goal_position,height,jumps)height实际的最高点 --CCBezierBy -->CCBezierBy.action(time,CCBezierConfig) CCBezierConfig.centrolPoint_1 CCBezierConfig.centrolPoint_2(最高点) CCBezierConfig.endPosition --CCEaseAction --CCEaseIn-->CCEaseIn.action(action,rate) 加速 --CCEaseOut-->CCEaseIn.reverse() --CCScaleBy -->CCScaleBy.action(int time,int scale); scale 缩放的比例 --CCRotateBy --> CCRotateBy.action(time,angle) 总是顺时针 --CCRotateTo --> CCRotateTo.action(time,angle) >180 逆时针转 偷懒 --CCTintBy (颜色渐变) CCTintBy.action(time,color) ccColor3B-->ccColor3B.ccc(r,g,b) --CCBlink (闪烁动画) CCBlink.action(time,blinkTimes) --CCHide --> CCHide.action(); --CCShow --> CCShow.action(); CCDelayTime() 停歇动画 起点 终点 时间间隔 以下三个都不受时间限制 --CCFollow 跟着一个CCNode 跑 layer follow a hero --CCRepeatForever 应用场景 行走的序列帧播放 CCRepeatForever.action(action) --CCSpeed 游戏速度的控制 当作组合 串联当作 CCSpawn --> CCSpawn.actions(actions,params) actions 串联 一个或多个params reverse() 地图的制作 .tmx 图片要用相对路径 name must be English 对象层的数据存储需要注意顺序 地图的加载 CCTMXTiledMap --> CCTMXTiledMap.tiledMap(tmxFile) tmxFile in assets 地图解析 CCTMXObjectGroup -->CCTMXTiledMap.objectGroupName(name) objects --> ArrayList 
  
    > CCCallFunc-->CCCallFunc.action(target,selector) target.getClass().getMethod(selector) public method CGPointUtil.distance(pos1,pos2) 序列帧的播放 CCAnimate -->CCAnimate.action(CCAnimation anim) CCAnimation --> CCAnimation.animation(name,delay,ArrayList 
   
     frames) CCSpriteFrame --> CCSprite.sprite(filepath).displayFrame() String filename = "z_0%d.png" String.foormat(filename,num); String filename = "z_%02d.png" (1--99) String.foormat(filename,num); 粒子系统 CCParticleSystem --> --CCParticleSnow -->CCParticleSnow.node(); setTexture(CCTextureCache.sharedTextureCache().addImage(imgUrl)) in assets stopSystem() ParticleDesigner .plist 声音引擎 音乐+音效 MediaPlayer + SoundPool SoundEngine-->sharedSoundEngine() playSound(ctxt,resID,isLoop) 地图移动 大地图移动 CCFollow CCFollow action follow hero action(CCNode) 小地图的移动 setIsTouchEnable(true) override ccTouchesMoved(MotionEvent event) gameMap.touch 如果需要手动移动地图 必须将地图的锚点设置成中心点 修改地图的坐标(中心) gameMap.getContentSize() -->CGSize gameMap.addChild(sprite) 将地图和精灵绑在一起 gameMap.getParent() -->layer 游戏暂停 主layer DemoLayer 和 处理的暂停的layer PauseLayer override ccTouchBegan()-->显示暂停layer 冻结主layer 关于暂停layer的添加 必须添加到场景中 this.getParent.addChild() this-->主layer this.onExit(); 游戏继续 PauseLayer.removeSelf() DemoLayer.this.onEnter() 植物VS僵尸 展示logo 停顿一会 隐藏logo 停顿一会 背景图片加载 进度条处理 耗时操作: 访问网络 版本检测 预加载图片 预加载声音文件 欢迎界面 展示FPS 引入图片(切记) 设置屏幕方向 设置屏幕大小 activity全屏 CCAnimate.action(animation,boolean stroe); 第二个参数取false 表示只播放一次序列帧 Layer.getChildByTag() 界面切换 切换场景 淡入淡出 CCFadeTransition.transition(time,CCScene); derector.replaceScene(transition) 菜单操作 CCMenu -->CCMenu.menu(); --addChild(CCMenuItemSprite item) CCMenuItemSprite --> CCMenuItemSprite.item(CCNode normalSprite,CCNode selectedSprite,CCNode target, String selector); public void selector(Obect o) 要加参数 指明哪个精灵被激活了 地图展示(不能处理用户touch) 展示对战对图(展示时间)--> 加载展示用的僵尸(展示用的点位) --> 移动地图(停留一会) --> 展示两个容器 植物选择(处理用户touch) 加载玩家已经获取到的植物信息 --> 选择植物 --> 取消植物 --> 点击一起摇滚 游戏开始前的准备工作(不能处理用户touch) 回收玩家已有的植物容器 --> 移动地图 --> 回收展示用的僵尸 --> 播放序列帧: 准备 安放 植物 对战处理(处理用户touch) 对战处理 用户可以touch 对战元素分析+战场划分 公共部分+分支 公共部分:元素创建+元素的销毁及存活过程中的动作信息+死亡监听 分支处理: 植物+僵尸+产物 植物 生产型植物+攻击型植物+防御型植物 向日葵 普通豌豆射手 坚果墙 僵尸: 按等级划分 初级僵尸 终极僵尸 产物: 子弹+阳光 添加僵尸 (集合) lineNum * 2 是起点 lineNum * 2 + 1 是终点 安放僵尸 僵尸攻击植物 (判断当前所在的块内是否有植物) 记录僵尸的工作状态 boolean 如果僵尸正在攻击 停止僵尸所有的动作 播放僵尸攻击的序列帧 造成植物的持续性杀伤 植物攻击僵尸 攻击型植物的集合 + 僵尸的集合中是否有僵尸 辅助功能 阳关管理 游戏进度:游戏的整体进度(植物冷冻 整体进度) 安放植物 位置计算 ( 16 + ((id - 1) % rowNum) * 54 , 175 - ((id - 1)/rowNum) *59 ) CGPointUtil.distance(Pos1,Pos2); 每隔多长时间做上面事情 CCSchedule --> CCSchedule.sharedSchedule.schedule(selector,target,float interval, boolean paused) selector方法要带一个float 参数 --> selector(float t){} 停止timer: CCSchedule.sharedSchedule.unSchedule(selector,target) 游戏进度 CCProgressTimer --> CCProgressTimer.progressWithFile("res") --setYype(int newType) --setPercentage(float percent) CCGLSurfaceView */ 
    
  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/178572.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午4:59
下一篇 2026年3月26日 下午4:59


相关推荐

  • 使用kubeadm搭建kubernetes单机master,亲测无异常

    使用kubeadm搭建kubernetes单机master,亲测无异常本专栏记录了楼主安装 k8smaster 的过程 耗时 2 周 原因是百度上的教程基本都不好用 楼主承诺本文章好用 建议收藏 1 准备工作 1 确认环境 swapoff a 关闭 swapsetenfor 临时关闭 selinux 每台机器的以下内容不能相同 sudocat sys class dmi id product uuid 每台机器的 uuid 不能相同 ifconfig a ip 不能相同 2 开放端口协议方向端口范围作用使用者

    2026年3月17日
    2
  • pycharm快速提示函数及其参数和使用的方法「建议收藏」

    pycharm快速提示函数及其参数和使用的方法「建议收藏」第一步:第二步:第三步:鼠标放到函数名,按住ctrl即可查看转载于:https://www.cnblogs.com/Richard-Liang/p/10744293.html

    2022年8月27日
    6
  • 常指针和指针常量区分

    常指针和指针常量区分前言 对于初学者而言 常指针和指针常量是特别容易混淆的两个概念 所以我准备了自从我学习 C 以来对两个概念做的最通俗易懂的阐述 希望能对你有所帮助 不当之处希望大家能批评留言指正 No 1 常指针 什么是常指针 首先说明 常指针是指向常量的指针 这是习惯说法 但是并不准确 常指针的准确定义 不可以通过

    2026年3月26日
    2
  • 图片批量重命名编号不带括号的_批量重命名不带括号

    图片批量重命名编号不带括号的_批量重命名不带括号如果你是一名摄影工作者,那么你的电脑里肯定会保存很多的图片,为了更好的整理和保存这些图片,比如一类主题的图片以相同文字命名并且编号,这样就方便以后查找了,解决办法有了,那么怎么给这么多图片命名并编号呢?必须是重命名的放大,这样可以一键修改文件名,但是这样修改后的图片名称虽然有编号,但是编号外面加了一层括号,比较难看,很多小伙伴不想要这个括号,所以今天小编就为大家详细介绍“图片批量重命名编号不要括号”的方法!需要用的工具软件:优速文件批量重命名工具软件下载地址:https://ww…

    2025年9月7日
    12
  • python爬12306并买票_python开发12306抢票

    python爬12306并买票_python开发12306抢票说明文字:1.本项目只是一个练习,熟悉python爬虫技术,没有任何用途2.最后运行的结果有时候会成功,有时候会显示错误界面,如下图所示。因为12306怎么可能允许你一直爬它呢准备工作:项目结构:…

    2025年6月21日
    4
  • shader 4 杂 一些和函数名词、数据结构

    shader 4 杂 一些和函数名词、数据结构

    2021年11月14日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号