【Cocos TypeScript 零基础 11.1】

关于静态

把类class里面的得分设置成静态变量不就方便访问了吗?
VScode当场报错,证明此方法不可行
那如果在使用class里变量申明呐?经验证还是报错
调用还是要用

const control = ts_control.getinff()  //  获取 control 类
this.fennow = control.defen    //  获取当前得分

最高分存取

核心方法

localStorage.setItem(索引名,值)		//	存
localStorage.getItem(索引名)		//	取

索引名与值均是string格式
类似于 ini 格式文件

重新开始

核心方法

director.loadScene(director.getScene().name)    //  重新加载
director.resume()   //  游戏继续,不写此代码游戏背景不走,敌机不生成

小技巧
string 报错的时候注意检查 Label 组件是否绑定上

双击爆炸实现

双击使用炸弹核心两点

  1. 双击检测
  2. 销毁所有敌机

实现双击触发事件

实现双击核心代码

    doubletime : number = 0.3   //  双击生效时间间隔
    clicktime : number = 0  //  最后一次点击保存事件

    protected onLoad(): void {
        input.on(Input.EventType.TOUCH_END,this.ontouchend,this)    //  注册双击监听事件
    }
    
    ontouchend(){
        let now = Date.now()    //  获取最新一次点击时间
        let time1 = (now - this.clicktime) / 1000   //  双击时间差换算成秒
        if (time1 < this.doubletime){
            console.log(`双击成功`)
            this.ondouble()     //  实际双击执行事件
        }
        this.clicktime = now    //  不管双击成功与否都保留最后一次点击时间
    }
    ondouble(){

    }

销毁所有敌机

敌机是在什么节点上生成的,就用那个节点来存储敌机信息,便于销毁

enemy_arr : Node[] = []   //  存储所有敌机,便于销毁

onrate0(){
        let en0 = instantiate(this.enemy0)  //  实例化
        this.linshi.addChild(en0)   //  实体化
        let posx = math.randomRangeInt(-240,240)    //  获取随机数
        let pw = this.linshi.getWorldPosition() //  获取临时点世界坐标
        en0.setWorldPosition(pw.x + posx , pw.y + 426 , pw.z)   //  设置敌机位置
        this.enemy_arr.push(en0)    //  新生成的敌机保存进数组
    }

这里只是展示了点示例 (临时存储点其实可以不用,可以缩减1行代码,懒得改了)
也有个问题,把生成的敌机存进数组,
是绑定 (赋值) 的形式?还是复制信息的形式?
绑定意味着敌机销毁时,数组成员也会销毁,或者报错
复制信息,就意味着在敌机销毁时要删除数组里复制的信息
小技巧
property 要识别数组成员,需加上中括号 []

@property([Node]) enemy_arr : Node[] = []   //  存储所有敌机,便于销毁

数组操作_点击跳转查看

改造敌机死亡

因为之前敌机死亡,我是直接用的销毁,虽然报警,但没报错,就一直忽略
现在这里牵涉到一个敌机生成与销毁数组对应关系,必须改造了
敌机属性代码

import {
   
    _decorator, Animation, Collider2D, Component, Contact2DType, Node} from 'cc';
import {
   
    ts_control } from './ts_control';
import {
   
    ts_enemy_rate } from './ts_enemy_rate';
const {
   
    ccclass, property } = _decorator;

@ccclass('ts_enemy_att')
export class ts_enemy_att extends Component {
   
   
    @property name1 : string = ''   //  动画名前缀
    @property speed : number = 200  //  移动速度
    @property hp : number = 1   //  生命值
    @property jifen : number = 0  //  计分
    @property(Animation) anim : Animation = null   //  动画
    collider : Collider2D = null
    enemy_rate = ts_enemy_rate.getinff()

    static inff : ts_enemy_att
    static getinff() : ts_enemy_att {
   
   return this.inff}

    protected onLoad(): void {
   
   
        ts_enemy_att.inff = this
    }

    start() {
   
   
        this.collider = this.getComponent(Collider2D)
        if (this.collider) {
   
   
            this.collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);   //  打开触发器
            //collider.on(Contact2DType.END_CONTACT, this.onEndContact, this);  //  结束触发没必要
        }
        this.jifen = this.hp    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值