不行啊。。。好像不触发
import { _decorator, Component, Node, tween, Vec3, systemEvent, SystemEvent, macro, KeyCode } from ‘cc’;
const { ccclass, property } = _decorator;
/**
- Predefined variables
- Name = Player
- DateTime = Thu Nov 18 2021 19:08:41 GMT+0800 (China Standard Time)
- Author = damen_
- FileBasename = Player.ts
- FileBasenameNoExtension = Player
- URL = db://assets/scripts/Player.ts
- ManualUrl = Introduction · Cocos Creator
-
*/
@ccclass(‘Player’)
export class Player extends Component {
// [1]
// dummy = ‘’;
// [2]
// @property
// serializableDummy = 0;
// 主角跳跃高度
@property
jumpHeight = 0;
// 主角跳跃持续时间
@property
jumpDuration = 0;
// 最大移动速度
@property
maxMoveSpeed = 0;
// 加速度
@property
accel = 0;
// 向左移动
@property
accLeft: boolean = false;
// 向右移动
@property
accRight: boolean = false;
@property
xSpeed = 0;
get y():number{
let position=this.node.getPosition().clone();
return position.y;
}
set y(value:number){
if(value==null){
// 曾遇到过这样写会出现传入一个undefined的值
return;
}
let position=this.node.getPosition().clone();
this.node.setPosition(position.x,value,position.z);
console.log("set y...");
}
runJumpAction() {
// 跳跃上升
var jumpUp = tween().by(this.jumpDuration, { y: this.jumpHeight }, {easing: 'sineOut'});
// 下落
var jumpDown = tween().by(this.jumpDuration,{ y: -this.jumpHeight }, {easing: 'sineIn'});
// 创建一个缓动,按 jumpUp、jumpDown 的顺序执行动作
var tweens = tween().sequence(jumpUp, jumpDown);
// 不断重复
return tweens;
}
onKeyDown (event) {
// set a flag when key pressed
switch(event.keyCode) {
case KeyCode.KEY_A:
console.log("onKeyDown A");
this.accLeft = true;
break;
case KeyCode.KEY_D:
console.log("onKeyDown D");
this.accRight = true;
break;
}
}
onKeyUp (event) {
// unset a flag when key released
switch(event.keyCode) {
case KeyCode.KEY_A:
this.accLeft = false;
break;
case KeyCode.KEY_D:
this.accRight = false;
break;
}
}
onLoad () {
var jumpAction = this.runJumpAction();
tween(this.node).repeatForever(jumpAction).start();
// 加速度方向开关
this.accLeft = false;
this.accRight = false;
// 主角当前水平方向速度
this.xSpeed = 0;
systemEvent.on(SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
systemEvent.on(SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
}
start () {
// [3]
}
// update (deltaTime: number) {
// // [4]
// }
update (deltaTime: number) {
// [4]
// 根据当前加速度方向每帧更新速度
if (this.accLeft) {
console.log("this.accLeft")
this.xSpeed -= this.accel * deltaTime;
}
else if (this.accRight) {
console.log("this.accRight")
this.xSpeed += this.accel * deltaTime;
}
// 限制主角的速度不能超过最大值
if (Math.abs(this.xSpeed) > this.maxMoveSpeed) {
// if speed reach limit, use max speed with current direction
this.xSpeed = this.maxMoveSpeed * this.xSpeed / Math.abs(this.xSpeed);
}
console.log("this.xSpeed: ",this.xSpeed);
// 根据当前速度更新主角的位置
var currentPosition = this.node.getPosition();
this.node.position = new Vec3(currentPosition.x+this.xSpeed * deltaTime, currentPosition.y, currentPosition.z);
}
onDestroy () {
// 取消键盘输入监听
systemEvent.off(SystemEvent.EventType.KEY_DOWN, this.onKeyDown, this);
systemEvent.off(SystemEvent.EventType.KEY_UP, this.onKeyUp, this);
}
}