Ts-实现

实现

1、关键字:implements

  在ts(js)中,一个class只能继承自另一个class,若其他类中的方法与属性也想继承,则很麻烦。  

  在ts中可以使用implements来实现一些类 共有方法属性提取。

2、先接口关键字 interface 定义接口,提取出公共方法:

 

/** IState 接口*/
export interface IState {
    //方法在进入状态时执行;
    onEnter(): void;
    //方法在该状态下时执行;
    onUpdata(): void;
    //方法在退出该状态时执行。
    onExit(): void;
}

3、然后implements实现

/** 站立状态*/
export class IdleState implements IState {
    private manager: FSM = null!;
    private parameter: Parameter = null!;
    private timer: number = 0;

    public IdleState(manager: FSM) {
        this.manager = manager;
        this.parameter = manager.parameter;
    }

    public onEnter(): void {
    }

    public onExit(): void {
        this.timer = 0;
    }

    public onUpdate(): void {
        this.timer += Time.deltaTime;
        if (this.timer >= this.parameter.idleTime) {
            this.manager.transitionState(StateType.Patrol);
        }
    }
}

4、新加一个Battery interface,使IdleState 类多次接入。

export interface Battery {
    fight(): void
}

然后实现多个接口实现
/** 站立状态*/
export class IdleState implements IState, Battery {
    private manager: FSM = null!;
    private parameter: Parameter = null!;
    private timer: number = 0;

    public IdleState(manager: FSM) {
        this.manager = manager;
        this.parameter = manager.parameter;
    }

    fight(): void {

    }

    public onEnter(): void {
    }

    public onExit(): void {
        this.timer = 0;
    }

    public onUpdate(): void {
        this.timer += Time.deltaTime;
        if (this.timer >= this.parameter.idleTime) {
            this.manager.transitionState(StateType.Patrol);
        }
    }
}
 

5、值得注意的是,接口是可以继承的

interface Battery{
    checkBatteryStatus():void;
}
 
interface Radio{
    switchRadio(trigger:boolean):void;    
   //注意写法,void表示函数有返回值
}
 
interface BatterywithRadio extends Radio{
    checkBatteryStatus():void;
}

 

需要注意的问题:

1、继承的类中,是必须有被继承接口的方法的

 

posted @ 2022-09-20 17:54  jiaxin2015  阅读(313)  评论(0)    收藏  举报