【cocos 2d微信小游戏开发教程】基础使用笔记分享(二)

简介: 【cocos 2d微信小游戏开发教程】基础使用笔记分享(二)
  1. 音频播放新建AudioSource组件播放,勾选循环自动播放即可 通过代码播放,新建PlayMusic脚本
  • 第一种方式
start () {
    //找到音频组件
    let player:cc.AudioSource = this.getComponent(cc.AudioSource);
    //加载音频
    cc.resources.load("start", cc.AudioClip, function(err, sp:cc.AudioClip) {
        //赋值音频
        player.clip = sp;
        //播放
        player.play();
        //是否正在播放
        player.isPlaying
        //暂停
        player.pause();
        //恢复
        player.pause();
        //停止
        player.stop();
        //是否循环播放
        player.loop = true;
        //修改声音大小 1最大声
        player.volume = 1;
    });
}
  • 第二种方式
//加载音频
cc.resources.load("start", cc.AudioClip, function(err, sp:cc.AudioClip) {
    //播放背景音乐
    let audioId: number = cc.audioEngine.playMusic(sp, true);
    //是否正在播放
    cc.audioEngine.isMusicPlaying();
    let id = 1;//获取的音效id
    //暂停
    cc.audioEngine.pause(id);//暂停某个音效
    cc.audioEngine.pauseMusic();//暂停背景音乐
    cc.audioEngine.pauseAll();//暂停所有声音
    //恢复某个音效
    cc.audioEngine.resume(id);
    //停止
    cc.audioEngine.stop(id);
    //循环播放
    cc.audioEngine.setLoop(id, true);
    //声音大小
    cc.audioEngine.setVolume(id, 1);
})
  1. 物理系统
    新增物理系统刚体组件(Rigid Body)

    编写代码开启
const {ccclass, property} = cc._decorator;
@ccclass
export default class Wuli extends cc.Component {
    onLoad () {
        //开启物理系统,注意只能在onLoad开启,不可以在start
        cc.director.getPhysicsManager().enabled = true;
    }
    start () {
       //获取刚体
        let rbody = this.getComponent(cc.RigidBody);
        //给物体一个向x为1000,y为0的力,作用点在0,0
        rbody.applyForce(cc.v2(1000,0), cc.v2(0,0), true);
        //给物体中心点一个力
        rbody.applyForceToCenter(cc.v2(5000,0), true);
        //给物体一个速度,每秒多少像素,速度是匀速的,力会导致速度越来越快
        rbody.linearVelocity = cc.v2(50, 0);
    }
    // update (dt) {}
}

Enabled Contact Listener 是否开启碰撞检测
type值的解释

static 静态,不受到重力也不受到速度,比如房子地面
kinematic 不受重力,受到速度影响
dynamic 可以受到重力和速度的影响
animated 参与动画时使用

  1. 物理碰撞
    给物体添加合适的碰撞体,注意是在物理组件里加

    检测碰撞,记得先去Rigid Body开启Enabled Contact Listener碰撞检测
onLoad () {
    //开启物理系统,注意只能在onLoad开启,不可以在start
    cc.director.getPhysicsManager().enabled = true;
}
start () {
    //获取刚体
    let rbody = this.getComponent(cc.RigidBody);
    //给物体一个速度,每秒多少像素,速度是匀速的,力会导致速度越来越快
    rbody.linearVelocity = cc.v2(50, 0);
}
//开始碰撞
onBeginContact(contact, self, other){       
    //碰撞点,用于生成火花爆炸效果等
    let points = contact.getWorldManifold().points;
    console.debug('发生碰撞'+points);
    //法线 两个物体碰撞,垂直于被碰撞体的一条线 事例:如果发生斜着碰撞,火花仍然垂直产生
    let normal = contact.getWorldManifold().normal;
}
//结束碰撞
onEndContact(contact, self, other){
}
// update (dt) {}
  1. 射线
onLoad () {
    //开启物理系统,注意只能在onLoad开启,不可以在start
    cc.director.getPhysicsManager().enabled = true;
    
    /**
     * 打出一条射线 从物体往天上打一条100的射线
     * 
     * cc.RayCastType.Any   穿过多个刚体时,随机返回碰撞的一个点
     * cc.RayCastType.Closest   返回碰撞第一个点
     * cc.RayCastType.All   返回多个点
     * cc.RayCastType.AllClosest   返回每个物体的碰撞的第一个点
     **/
    let results = cc.director.getPhysicsManager().rayCast(this.node.getPosition(), cc.v2(this.node.x, this.node.y+100), cc.RayCastType.Closest);
    for(let i = 0; i<results.length; i++){
        let res = results[i];
        //射线碰到的碰撞器
        // res.collider
        //碰到的点
        // res.point
        //碰到的法线
        // res.normal
    }
}

射线小练习,实现物体上下移动

const {ccclass, property} = cc._decorator;
@ccclass
export default class Wuli extends cc.Component {
    //方向
    dir: cc.Vec2 = cc.v2(0,1);
    onLoad () {
        //开启物理系统,注意只能在onLoad开启,不可以在start
        cc.director.getPhysicsManager().enabled = true;
    }
    update (dt) {
        //向下移动
        this.node.y -= this.dir.y * 100 * dt;
        //射线检测
        let res = cc.director.getPhysicsManager().rayCast(this.node.getPosition(), cc.v2(this.node.x, this.node.y- this.dir.y*100), cc.RayCastType.Closest);
        console.log(res.length);
        if(res.length > 0){
            this.dir.y *= -1;
        }
    }
}

  1. 动作系统
// 创建一个移动动作,2秒移动到100,100坐标位置
var action = cc.moveTo(2, 100, 100);
// 创建一个移动动作,2秒移动100,100个位置,To是绝对位置,By是相对位置
//var action = cc.moveBy(2, 100, 100);
//旋转
action = cc.rotateTo(2, 100);
//缩放
action = cc.scaleTo(2, 1.5,0.5);
//跳跃,2秒从当前位置向右跳200位置,跳的高度为100,跳1次
action = cc.jumpBy(2, 200, 0, 100, 1);
//闪烁 3秒闪烁5次
action = cc.blink(3, 5);
//淡出
action = cc.fadeOut(3);
//淡入
action = cc.fadeIn(3);
//渐变 3秒变成100透明度
action = cc.fadeTo(3, 100);
//颜色 3秒变成紫色
action = cc.tintTo(3, 100, 30, 100);
//显示
let action = cc.show();
//隐藏
action = cc.hide();
//切换显示隐藏  
action = cc.toggleVisibility();
//翻转
action = cc.flipX(true);
action = cc.flipY(true);
//停一秒再继续执行
action = cc.delayTime(1);
// 执行动作
node.runAction(action);
// 停止一个动作
node.stopAction(action);
// 停止所有动作
node.stopAllActions();
// 给 action 设置 tag
var ACTION_TAG = 1;
action.setTag(ACTION_TAG);
// 通过 tag 获取 action
node.getActionByTag(ACTION_TAG);
// 通过 tag 停止一个动作
node.stopActionByTag(ACTION_TAG);

顺序动作 cc.sequence 顺序动作可以让一系列子动作按顺序一个个执行。示例:

// 让节点左右来回移动
 var seq = cc.sequence(cc.moveBy(0.5, 200, 0), cc.moveBy(0.5, -200, 0));
 node.runAction(seq);

同步动作 cc.spawn 同步动作可以同步执行对一系列子动作,子动作的执行结果会叠加起来修改节点的属性。示例:

// 让节点在向上移动的同时缩放
 var spawn = cc.spawn(cc.moveBy(0.5, 0, 50), cc.scaleTo(0.5, 0.8, 1.4));
 node.runAction(spawn);

重复动作 cc.repeat 重复动作用来多次重复一个动作。示例:

// 让节点左右来回移动,并重复 5 次
 var seq = cc.repeat(
             cc.sequence(
                 cc.moveBy(2, 200, 0),
                 cc.moveBy(2, -200, 0)
             ), 5);
 node.runAction(seq);

永远重复动作 cc.repeatForever 顾名思义,这个动作容器可以让目标动作一直重复,直到手动停止。

// 让节点左右来回移动并一直重复
 var seq = cc.repeatForever(
             cc.sequence(
                 cc.moveBy(2, 200, 0),
                 cc.moveBy(2, -200, 0)
             ));

速度动作 cc.speed 速度动作可以改变目标动作的执行速率,让动作更快或者更慢完成。

// 让目标动作速度加快一倍,相当于原本 2 秒的动作在 1 秒内完成
 var action = cc.speed(
                 cc.spawn(
                     cc.moveBy(2, 0, 50),
                     cc.scaleTo(2, 0.8, 1.4)
                 ), 2);
 node.runAction(action);

动作回调

var finished = cc.callFunc(function(target, score) {
    this.score += score;
}, this, 100); //动作完成后会给玩家加 100 分
//在声明了回调动作 finished 后,您可以配合 cc.sequence 来执行一整串动作并触发回调:
var myAction = cc.sequence(cc.moveBy(1, cc.v2(0, 100)), cc.fadeOut(1), finished);
//在同一个 sequence 里也可以多次插入回调:
var myAction = cc.sequence(cc.moveTo(1, cc.v2(0, 0)), finished1, cc.fadeOut(1), finished2); // finished1、finished2 都是使用 cc.callFunc 定义的回调动作
  1. 动画系统


    绑定事件,挂载脚本,写个test()方法


    编辑一个跑步动画,全选图片拖进去即可,然后调节控制sample和speed值控制速度

脚本控制动画

```typescript
start () {
    //获取动画组件
    let ani = this.getComponent(cc.Animation);
    //播放动画
    ani.play("run");
    //暂停
    ani.pause();
    //继续
    ani.resume();
    //停止
    ani.stop();
}
```
持续更新中。。。。
目录
相关文章
|
4月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
4月前
|
小程序 PHP 图形学
热门小游戏源码(Python+PHP)下载-微信小程序游戏源码Unity发实战指南​
本文详解如何结合Python、PHP与Unity开发并部署小游戏至微信小程序。涵盖技术选型、Pygame实战、PHP后端对接、Unity转换适配及性能优化,提供从原型到发布的完整指南,助力开发者快速上手并发布游戏。
|
5月前
|
小程序 JavaScript API
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
这篇文章介绍了使用uni-halo框架进行微信小程序开发的过程,包括选择该框架的原因、开发目标以及项目配置和部署的步骤。
233 0
uni-halo + 微信小程序开发实录:我的第一个作品诞生记
|
8月前
|
小程序 前端开发 Android开发
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
1693 29
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
|
8月前
|
JSON 机器人 API
gewe微信机器人搭建教程
GeWe开放平台是基于 微信开放平台的二次封装API服务,开发者可以使用本服务来处理微信中的各种事件,并可以通过后台调用对应的 API 来驱动微信自动执行任务,如自动收发消息、自动化应答、自动群邀请、群管理等,封装了 RPA技术流程,简化开发者二次开发难度,提供了开发者与微信对接的能力,使用简单,操作快捷,支持多种语言接入。
482 17
|
7月前
|
监控 数据可视化 数据处理
微信养号脚本,全自动插件,AUTOJS开发版
这是一套自动化微信养号工具,包含主脚本`wechat_auto.js`与配置文件`config.json`。主脚本实现自动浏览朋友圈、随机阅读订阅号文章及搜索指定公众号三大功能,支持自定义滚动次数、阅读时长等参数。代码通过随机化操作间隔模拟真实用户行为,具备完善的错误处理和日志记录功能。配套UI模块提供可视化操作界面,可实时监控任务状态与运行日志,便于调整参数设置。控制器部分扩展了批量数据处理能力,如学生信息的增删改查操作,适用于多场景应用。下载地址:https://www.pan38.com/share.php?code=n6cPZ 提取码:8888(仅供学习参考)。
|
9月前
|
小程序 Java 关系型数据库
weixin163基于微信小程序的校园二手交易平台系统设计与开发ssm(文档+源码)_kaic
本文介绍了一款基于微信小程序的校园二手物品交易平台的开发与实现。该平台采用Java语言开发服务端,使用MySQL数据库进行数据存储,前端以微信小程序为载体,支持管理员和学生两种角色操作。管理员可管理用户、商品分类及信息、交易记录等,而学生则能注册登录、发布购买商品、参与交流论坛等。系统设计注重交互性和安全性,通过SSM框架优化开发流程,确保高效稳定运行,满足用户便捷交易的需求,推动校园资源共享与循环利用。
|
9月前
|
小程序 关系型数据库 Java
weixin168“返家乡”高校暑期社会实践微信小程序设计与开发ssm(文档+源码)_kaic
本文探讨高校暑期社会实践微信小程序的开发与应用,旨在通过信息化手段提升活动管理效率。借助微信小程序技术、SSM框架及MySQL数据库,实现信息共享、流程规范和操作便捷。系统涵盖需求分析、可行性研究、设计实现等环节,确保技术可行、操作简便且经济合理。最终,该小程序可优化活动发布、学生信息管理和心得交流等功能,降低管理成本并提高工作效率。
|
11月前
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
JSON 小程序 JavaScript
uni-app开发微信小程序的报错[渲染层错误]排查及解决
uni-app开发微信小程序的报错[渲染层错误]排查及解决
3354 7

热门文章

最新文章