2 回答
TA贡献1845条经验 获得超8个赞
错误消息表明您的玩家主体是这些类型之一'Body | StaticBody | BodyType'
,但 StaticBody 没有setVelocity
方法。Typescript 具有类型保护的概念来处理这种情况,您可以在其中使用具有不同成员的联合类型。
这里的解决方案是检查 this.body 是否有 setVolicity 函数。
update() {
// when true typescript know it is not a StaticBody
if ("setVelocity" in this.body)
this.body.setVelocity(0, 0);
}
您还可以定义自定义类型保护函数并在 if 语句中使用它,如下所示:
//custom typeguard function with the return type 'body is Body'
function isBody(body: Body | StaticBody): body is Body {
return (body as Body).setVelocity !== undefined;
}
if (isBody(this.body)) {
this.body.setVelocity(5);
}
TA贡献1852条经验 获得超7个赞
正如 jcalz 所解释的,答案是测试相关对象是否是包含要调用的函数的类的实例。换句话说,确保我们希望使用Body而不是StaticBody. 这可以通过简单地检查该函数是否存在于对象中来完成:
if('setVelocity' in this.body) {
this.body.setVelocity(0, 0);
}
更具体地说,我们可以通过以下方式检查该对象是否是预期对象的实例:
if(this.body instanceof Phaser.Physics.Arcade.Body) {
this.body.setVelocity(0, 0);
}
添加回答
举报