自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(125)
  • 收藏
  • 关注

原创 Creator实战项目【保卫萝卜】-- 模块之间的交互

实现:在模块A 调用 模块B 的函数模块A发送消息,模块B响应消息。如:在卡片层要调用武器层的addWeapon函数,传入第一次点击的坐标在脚本基类ScriptBase.ts中,编写sendMsg函数(遍历所有模块,查找模块中是否有传递进来的funcName这个属性的函数),消息名其实就是另一个模块中的函数名。//消息名 模块名 参数sendMsg(funcName:string,moduleName:string,...rest:any){ //遍历所有模块,去查找模块中是否有传递进来的

2021-07-19 15:16:25 428 1

原创 Lua基础知识

一、注释单行注释:–多行注释:–[[ --]]二、 输出:print三、变量定义:locallocal x = 100;print(x);四、数据类型: number , boolean,string,function,table,niltype函数:用于查看数据类型注意:把变量赋值为nil,就是释放内存。local win = true;local func = function() endlocal tab={};print(type(win));print(type

2021-07-17 11:09:55 307 1

原创 Creator实战项目【保卫萝卜】-- 多样化的处理(不同地图、不同卡片)

修改关卡(不同关卡不同地图)import ScriptBase from '../Game/ScriptBase'import ResMgr from '../Res/ResMgr' //用于加载资源const {ccclass, property} = cc._decorator;@ccclassexport default class TiledMapCtrl extends ScriptBase { onInit(){ //获取格子地图组件

2021-07-16 21:02:25 352 2

原创 Creator实战项目【保卫萝卜】-- 资源的使用(修改预制体)

通过资源方式加载预制体、精灵、json数据。import ResMgr from './ResMgr'import MgrBase from './ResBase'const {ccclass, property} = cc._decorator;@ccclassexport default class NewClass extends cc.Component { start () { //进度回调函数 let onProgress =(finish:

2021-07-16 19:00:50 460

原创 Creator实战项目【保卫萝卜】-- 资源加载(进度条)与资源管理

新建一个recourse文件夹,把需要加载的资源放入。创建Loading脚本,使用 cc.resources.loadDir( ) 加载资源cc.resources 是一个 bundle,用于管理所有在 assets/resources 下的资源const {ccclass, property} = cc._decorator;@ccclassexport default class NewClass extends cc.Component { start () { //进度回

2021-07-16 17:02:47 1105 2

原创 Creator实战项目【保卫萝卜】-- 怪物扣血、移除怪物(移除怪物以后,要考虑攻击目标不存在:存在才处理移动、扣血、销毁等操作)

在怪物脚本中定义怪物血量、公布血条,写一个伤害接口(传入伤害)//怪物血量private totalHp:number = 1000;private hp:number = 1000;Damage(damage:number){ this.hp -= damage; //血量为0 if(this.hp<=0){ //销毁怪物,移除怪物脚本 this.remove(); } } 子弹碰撞时处理扣血;当敌人打

2021-07-15 16:35:51 401

原创 Creator实战项目【保卫萝卜】-- 子弹与怪物的碰撞

编辑碰撞分组分别为子弹和敌人添加碰撞组件并选择分组写一个全局脚本GameInit在引擎初始化时就开启碰撞(会自动调用)//cc.game 包含游戏主体信息并负责驱动游戏的游戏对象cc.game.on(cc.game.EVENT_ENGINE_INITED,()=>{ //开启碰撞 cc.director.getCollisionManager().enabled = true;})在子弹脚本中编写代码处理碰撞效果 //子弹碰撞onCollisionEnter(o

2021-07-15 15:55:08 331

原创 Creator实战项目【保卫萝卜】-- 子弹对着敌人发射

在武器脚本中定义攻击目标import ConfigMgr from './ConfigMgr'import BulletLayer from './BulletLayer';import MonsterLayer from './MonsterLayer'import Monster from './Monster'const {ccclass, property} = cc._decorator;@ccclassexport default class Weapon extends cc.

2021-07-15 15:31:13 449

原创 Creator实战项目【保卫萝卜】-- 武器旋转

在武器的onUpdate中编写旋转逻辑,让武器实时旋转。onUpdate(dt){ let monsterTs = this.monsterLayerTs.getMonsterByPosAndDistance(this.node.position,this.fireRangle); //判断如果脚本不为空,攻击范围有敌人。 if(monsterTs){ //处理武器旋转 //获取武器指向怪物的向量 let deltaPos =

2021-07-13 21:08:08 198

原创 Creator实战项目【保卫萝卜】-- 子弹产生、武器开火、敌人移除

子弹

2021-07-13 14:59:14 279

原创 Creator实战项目【保卫萝卜】-- 怪物的移动

在Monster.ts中写一个接口,拿到怪物的当前坐标和下一个拐点坐标,通过动作tween让怪物移动。通过递归调用自己来实现不断地向下一个拐点移动。//怪物自己移动到最后。runWithPath(){ //获取怪物当前坐标 let curPos =cc.v2(this.node.x,this.node.y); //索引加1 this.index++; //获取下一个拐点坐标 let endPos = this.arrPos[this.in

2021-07-12 20:35:39 648

原创 Creator实战项目【保卫萝卜】-- 怪物的生成、根据格子地图中的拐点来设置怪物的初始位置

在编辑器中新建怪物,把怪物做成预制体。在怪物层中创建怪物import ScriptBase from './ScriptBase'import Monster from './Monster'const {ccclass, property} = cc._decorator;@ccclassexport default class MonsterLayer extends ScriptBase { @property(cc.Prefab) monsterPrefab:cc

2021-07-12 20:18:42 537 1

原创 Creator实战项目【保卫萝卜】-- 武器层

创建武器层和武器层脚本;创建武器节点(节点下拖入武器托盘Tray和武器炮筒Barrel),先挂脚本,在做成预制体。在武器层中,编写addWeapon接口创建武器。import ScriptBase from './ScriptBase'import ConfigMgr from './ConfigMgr' //用于获取脚本数据import TiledMapCtrl from './TiledMapCtrl' //用于强转const {ccclass, property} = cc._

2021-07-12 14:24:28 373

原创 Creator实战项目【保卫萝卜】-- 卡片层、卡片

把卡片精灵做成预制体,锚点为0,0创建一个卡片层,继承于脚本基类,在卡片层脚本中拿到预制体创建卡片(卡片要通过代码创建,不要直接在层级管理器中挂,否则会在Game.ts的onLoad加载所有节点是我就加载出来,后续处理比较麻烦)import ScriptBase from './ScriptBase'const {ccclass, property} = cc._decorator;@ccclassexport default class CardLayer extends ScriptBas

2021-07-10 10:46:37 299 1

原创 Creator实战项目【保卫萝卜】-- 触摸层

实现:点击地图来判断是否创建武器import ScriptBase from './ScriptBase'import ConfigMgr from './ConfigMgr' //用于获取脚本数据import TiledMapCtrl from './TiledMapCtrl' //用于强转const {ccclass, property} = cc._decorator;@ccclassexport default class TouchLayer extends Script

2021-07-10 09:45:42 226

原创 Creator实战项目【保卫萝卜】-- 格子地图

import ScriptBase from './ScriptBase'const {ccclass, property} = cc._decorator;@ccclassexport default class TiledMapCtrl extends ScriptBase { //初始化格子地图组件变量 private tiledMap:cc.TiledMap = null; //定义格子地图相关变量 private tiledSize:cc.Size =

2021-07-09 17:28:59 350

原创 Creator实战项目【保卫萝卜】-- 修改地图

创建游戏主场景,拖一张格子地图放入层级管理器,把Tmx Asset中的属性删掉。编写地图控制脚本,在TiledMapCtrl.ts中,公布一个地图资源数组,把多个格子地图拖进去。@property([cc.TiledMapAsset])arrTiledMapAssets:cc.TiledMapAsset[] = [];在TiledMapCtrl.ts中修改格子地图//初始化格子地图组件变量private tiledMap:cc.TiledMap = null; start(){

2021-07-09 15:55:12 482

原创 Creator实战项目【保卫萝卜】-- pageView区别点击与滑动

给一个bool值变量判断是否点击,初始化为true(因为进入关卡选择就可以点击进入游戏);滑动时:如果监听到有发生滑动,把bool值设为false(非点击);滑动结束后:把bool值设为true(可以点击);触摸放开时:如果bool值为true(没有滑动,那么触摸事件就是点击),切换场景。private isClick:boolean = true;this.levelPageView.node.on('scrolling',()=>{ //发生滑动 //非点击

2021-07-09 12:52:24 270

原创 Creator实战项目【保卫萝卜】-- 关卡选择、pageView效果

在关卡选择节点上下创建背景图、pageView组件。编写LevelSelect脚本,挂载到关卡选择节点上。在LevelSelect.ts脚本中,公布pageView组件和组件切换精灵帧合图。实现修改组件中的精灵帧图片(先修改单个)const {ccclass, property} = cc._decorator;@ccclassexport default class LevelSelect extends cc.Component { @property(cc.PageView)

2021-07-09 11:35:51 564 2

原创 cocos2d-x实战项目【超级玛丽】-- 配置和使用动画数据

{ "animName":["smallIdle","smallWalk","smallJump","smallDie","bigIdle","bigWalk","bigJump","bigDie"], "animInfo":[ [ "small_1_walk_01.png" ], [ "small_1_walk_01.png", "small_1_walk_02.png", "small_1_walk_03.png", "small_1_walk_04.png

2021-07-09 10:14:17 443

原创 cocos2d-x实战项目【飞机大战】-- 配置子弹数据

json文件[ { "id":3001, "img":"blueBall2.png" }, { "id":3002, "img":"greenBall.png" }, { "id":3003, "img":"helperBullet.png" }, { "id":3004, "img":"monsterBullet1.png" }, { "id":3005, "img":"orangeCircle.png" }, { "id":300

2021-07-08 11:15:19 232

原创 【cocos2d-x知识点】-- 数据模块:配置json数据(完整)

数据:对象使用大括号{ }表示,由键值对组成;键必须是字符串“ ”,值可以是任何类型。数组使用[ ]表示。Json关卡数据[ { "id":1001, "name":"第一关", "waves": [ { "enemyId":3001, "count":3, "interval":1, "nextInterval":5 }, { "enemyId":3001, "count":4, "interval

2021-07-08 11:11:59 238

原创 【cocos2d-x知识点】-- 遥感

创建一个遥感类,继承于节点,挂载相应图片(遥杆背景和遥感)。CJoystick.h 声明:class CJoystick : public Node{public: enum TextureType { LOCAL, //单图 PLIST //合图 };public: CJoystick(); ~CJoystick(); //创建一个带参数的create接口(遥感背景,遥感,图片类型),用于传图片 static CJoystick* create(const stri

2021-07-08 10:56:51 189

原创 【cocos2d-x知识点】-- 匿名函数(lambda 表达式)

lambda 表达式是一种匿名函数,即没有函数名的函数。定义格式: [捕获列表] (参数) -> 返回类型 {函数体}[capture] (parameters) ->return-type {statement}定义解释:捕捉列表:捕捉上下文中的变量让lambda函数来使用;参数列表:如果不需要进行参数传递,可以连同括号()一起省略;返回类型:用于追踪lambda函数(有返回值情况下)的返回类型。若lambda函数不需要返回值,可以省略;函数体:在函数体中除了可以使用参数列表中

2021-07-08 10:01:18 212

原创 cocos2d-x实战项目【飞机大战】-- 伤害扣血(敌人和玩家均有扣血,写在角色基类中)

在RoleBase中定义扣血函数和血条/扣血virtual void damage(int nDamage); //传入伤害的参数(如攻击力)//标记死亡CC_SYNTHESIZE(bool, m_bDeath, Death); //创建一个bool属性//最大血量CC_SYNTHESIZE(int, m_nMaxHp, MaxHp);//血条LoadingBar* m_pBlood;在初始化时创建进度条bool CRoleBase::initWithSpriteFrameName(

2021-07-08 09:39:24 338

原创 cocos2d-x实战项目【飞机大战】-- 子弹与敌机的碰撞

如果不是格子地图,两个精灵的碰撞一般是通过包围盒是否交叉来判定(记得在同一坐标系下)void CGameScene::update(float fDelta){ //通过管理者分别拿到子弹和敌机 Vector<Node*> vecBullet = m_pBulletMgr->getChildren(); Vector<Node*> vecEnemy = m_pEnemyMgr->getChildren(); for (int i = 0; i < vec

2021-07-08 09:36:11 384

原创 cocos2d-x实战项目【飞机大战】-- 怪物根据不同关卡按波出现

在EnemyMgr的初始化时:bool CEnemyMgr::init(){ if (!Node::init()) { return false; } //拿到关卡数据 int nLevelId = CDynamicData::getInstance()->getLevelId(); pLevelDt = CConfigMgr::getInstance()->getData("LevelDtMgr")->getDataByID<CLevelDt*>(nLe

2021-07-08 09:26:57 277

原创 cocos2d-x实战项目【飞机大战】-- 动作系统

//MoveTo* pMoveTo = MoveTo::create(3, Vec2(fx,100)); //移动到某个具体位置MoveBy* pMoveBy = MoveBy::create(6, Vec2(0, -visibleSize.height - 200)); //在当前基础上的偏移RemoveSelf* pRemoveSelf = RemoveSelf::create(); //序列动作(包装的动作依次执行)Sequence* pSeq = Sequence::create(pMo

2021-07-08 09:22:09 182

原创 cocos2d-x实战项目【飞机大战】-- 根据PageView切换关卡和怪物波

动态数据类CDynamicData中:CC_SYNTHESIZE(int, m_nLevelId, LevelId); //在关卡选择的时候保存这个数据在LevelSel中:void CLevelSel::onBtnStart(Ref* pRender) //关卡选择页面开始游戏的回调函数{ //获取当前所选的m_pPageView的索引 int nIndex = m_pPageView->getCurPageIndex(); //由于引擎不操作时nIndex默认为-1,用三目运

2021-07-08 09:20:15 138

原创 【cocos2d-x知识点】-- 翻页控件PageView

PageView* m_pPageView;//关卡选择翻页效果(pageView控件类)m_pPageView = PageView::create();m_pPageView->setContentSize(Size(80, 80));m_pPageView->setPosition(Vec2(origin.x + visibleSize.width / 2 - 40, origin.y + visibleSize.height / 2 - 40));this->addCh

2021-07-08 09:11:34 565

原创 cocos2d-x实战项目【飞机大战】-- 按钮button

#include "ui/CocosGUI.h"using namespace ui;Button* m_pBtnStart;void onBtnStart(Ref* pRender);//游戏开始按钮(Button类)m_pBtnStart = Button::create("GameStartNormal.png", "GameStartSelected.png", "", TextureResType::PLIST);m_pBtnStart->addClickEventList

2021-07-07 10:31:20 166

原创 cocos2d-x实战项目【飞机大战】-- 简单状态机:用于控制动画播放

每一次切换之前先停止其他的动画,不然会同时播放多个动画,造成闪烁效果;但是每次移动时stopAllActions会被调用多次,每帧调用一次,造成动画被定住的效果;引入“简单状态机”,让每种动画在同一个状态下只播放一次。int m_nState; //简单状态机void changeState(int nState); //用函数来切换状态enum { E_STATE_NONE, E_STATE_STRAIGHT, E_STATE_LEFT, E_STATE_RIGHT};

2021-07-07 10:28:49 178

原创 cocos2d-x实战项目【飞机大战】-- 动画

//1、收集动画帧(精灵帧)SpriteFrameCache* pCache = SpriteFrameCache::getInstance();char szName[32] = {}; //精灵帧名称字符串//2、通过Animation来收集动画信息Animation* pStraightAnim = Animation::create();for (int i = 0; i < 2; i++) //第0张和第1张图片{ sprintf_s(szName, "Plane

2021-07-07 10:27:40 205

原创 cocos2d-x实战项目【飞机大战】-- 点击点与包围盒、坐标转化

//获取点击点Vec2 touchPos = pTouch->getLocation();//获取飞机包围盒(不能是this 因为this是节点,没有长宽)Rect rec = m_pPic->getBoundingBox();由于点击点是相对于世界坐标,包围盒是相对于玩家,两者参照系不同,会造成只有点击屏幕右下角,飞机才能跟随鼠标移动的现象,必须转化参照系让其统一。法1:包围盒坐标转化成相对世界坐标Vec2 pos = this->convertToWorldSpace

2021-07-07 10:26:57 255

原创 cocos2d-x实战项目【飞机大战】-- 触摸事件(让飞机跟着鼠标动)

三部曲1、创建单点触摸事件监听2、监听者调用不同的触摸事件(Began、Moved、Ended)3、事件派发void CPlayer::_addTouchEvent(){ //添加触摸事件,单点触摸 EventListenerTouchOneByOne* pEventListener = EventListenerTouchOneByOne::create(); //告诉引擎发生的触摸事件,引擎会根据不同的触摸事件调用回调函数 pEventListener->onTouchBegan

2021-07-07 10:19:34 413

原创 cocos2d-x实战项目【飞机大战】-- 继承精灵、继承节点

继承精灵bool CPlayerOne::init(){ if (!Sprite::initWithSpriteFrameName("Plane0_0.png")) //Image/Plane.plist里面的精灵帧 { return false; } return true;}继承节点:节点不能承载图片,要创建一张图片CC_SYNTHESIZE_READONLY(Sprite*, m_pPic, Pic);bool CPlayer::init(){ if (!Node:

2021-07-07 09:53:07 120

原创 cocos2d-x实战项目【飞机大战】-- 背景滚动

vector<Sprite*> m_vecBg; //容器存放图片//创建背景void createBg();:m_fSpeed(-75) //向下运动void CBackground::createBg(){ //获取窗口的大小和原点 auto visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOr

2021-07-07 09:39:11 242

原创 【cocos2d-x知识点】-- 区分不同按钮的回调

如何区别?在创建时把按钮指针对象存起来,然后用 if else 分情况区别MenuItemImage* m_pStartButton;MenuItemImage* m_pOptionButton;MenuItemImage* m_pExitButton;void onBtnEvent(Ref* pSender); //按钮的回调函数要求一个Ref*的参数void CGameMenu::onBtnEvent(Ref* pSender){ //根据不同的按钮返回不同的效果 if (m_pS

2021-07-07 09:37:42 137

原创 cocos2d-x实战项目【飞机大战】-- 定时器、合图、菜单按钮

1、定时器//定时器 scheduleOnce(带一个参数的回调函数、延迟时间(几秒后执行一次)、键(用于删除的标识))//CC_CALLBACK_1(调用的函数, 对象) this->scheduleOnce(CC_CALLBACK_1(CGameLogo::chanceScene,this), 0.5, "chanceScene");2、创建合图精灵//精灵帧缓存池(单例)SpriteFrameCache* pCache = SpriteFrameCache::getInstanc

2021-07-07 09:35:24 179

原创 cocos2d-x实战项目【飞机大战】-- 基础知识

1、窗口大小与自适应:static cocos2d::Size designResolutionSize = cocos2d::Size(320, 480);static cocos2d::Size smallResolutionSize = cocos2d::Size(320, 480);2、auto:C++11的新语法auto age = 5; //定义一个变量,类型自动赋为右边的类型3、创建场景auto scene = HelloWorld::createScene(); //

2021-07-07 09:28:54 389

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除