123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- cc.Class({
- extends: cc.Component,
- properties: {
- item: cc.Node,
- shooterFrames: [cc.SpriteFrame],
- },
- // 初始化组件
- init (game) {
- this.game = game;
- this.wrap = game.wrap;
- this.modeHit = game.modeHit;
- // this.shooterMng = game.shooterMng;
- this.audioMng = game.audioMng;
- this.vSize = cc.director.getVisibleSize();
- this.posY = this.vSize.height / 2 + 50;
- // this.weldJoint = this.getComponent(cc.WeldJoint);
- this.shootBody = this.getComponent(cc.RigidBody)
- this.node.x = 0;
- this.node.y = this.vSize.height / 2 - 60;
- this.status = 0;
-
- // 设置箭矢皮肤
- let arrIndex = window.Global.arrowSkinIndex || 0
- this.item.getComponent(cc.Sprite).spriteFrame = this.shooterFrames[arrIndex]
- // 监听触摸事件
- this.scheduleOnce(() => {
- this.wrap.once(cc.Node.EventType.TOUCH_START, this.shotEvent, this)
- }, 0.09)
- },
- shotEvent () {
- if(this.game.gameMode != 'hit') {
- //必中瓶模式结束后1.5秒内暂停发射箭矢
- if(this.modeHit.status == 2) {
- this.wrap.once(cc.Node.EventType.TOUCH_START, this.shotEvent, this)
- } else {
- this.runAnim()
- }
- } else {
- this.runHit()
- }
- },
- runHit () {
- let spawn = cc.spawn(cc.moveTo(0.1, cc.p(this.node.x, this.node.y - this.vSize.height)), cc.fadeOut(0.2));
- this.node.runAction(spawn);
- this.scheduleOnce(this.reset, 0.1)
- },
- runAnim () {
- // this.status = 1;
- this.audioMng.playShoot()
- // let spawn = cc.spawn(cc.moveTo(0.3, cc.p(this.node.x, this.node.y - this.vSize.height)), cc.fadeOut(0.5));
- // this.node.runAction(spawn);
- let vec = cc.v2(this.vSize / 2, 0).sub(this.node.position)
- let distance = vec.mag();
- let velocity = vec.normalize().mulSelf(2500)
- this.shootBody.type = cc.RigidBodyType.Dynamic;
- this.shootBody.linearVelocity = velocity;
- },
- /**
- * 碰撞检测
- */
- // onCollisionEnter: function (other, self) {
- // //击中必中瓶模式
- // if(this.game.gameMode == 'hit') {
- // this.game.inGameUI.addScore(1);
- // this.reset()
- // return;
- // }
- // if(other.node.group == 'wall') {
- // if(this.game.gameMode != 'undead') {
- // this.scheduleOnce(() => {
- // this.game.gameOver();
- // }, 0.5)
- // }
- // } else if(other.node.group == 'bottle') {
- // let score = 1;
- // this.game.inGameUI.addScore(score);
- // this.reset()
- // }
- // },
- // 只在两个碰撞体开始接触时被调用一次
- onBeginContact (contact, selfCollider, otherCollider) {
- if(otherCollider.node.group == 'wall') {
- this.game.delShooter(this.node);
- if(this.game.gameMode != 'hit') {
- this.scheduleOnce(() => {
- this.game.gameOver();
- }, 0.5)
- }
- } else if(otherCollider.node.group == 'bottle') {
- this.game.delShooter(this.node);
- let score = 1;
- this.game.inGameUI.addScore(score);
- this.game.readyShooter();
- }
- },
-
- /**
- * 物理碰撞回调
- */
- // onPostSolve (contact, selfCollider, otherCollider) {
- // let impulse = contact.getImpulse();
- // if (Math.abs(impulse.normalImpulses[0]) < cc.PhysicsManager.PTM_RATIO) {
- // return;
- // }
- // let joint = this.weldJoint;
-
- // if (joint.enabled) {
- // joint.enabled = false;
- // return
- // }
- // // let arrowBody = selfCollider.body;
- // // let targetBody = otherCollider.body;
- // // let worldCoordsAnchorPoint = arrowBody.getWorldPoint(cc.v2(0.6, 0));
- // // joint.connectedBody = targetBody;
- // // joint.anchor = arrowBody.getLocalPoint( worldCoordsAnchorPoint );
- // // joint.connectedAnchor = targetBody.getLocalPoint( worldCoordsAnchorPoint );
- // // joint.referenceAngle = targetBody.node.rotation - arrowBody.node.rotation;
- // // joint.enabled = true;
- // },
- /**
- * 重置箭的位置和状态
- */
- reset () {
- this.game.resetShooter(this.node);
- // this.node.x = 0;
- // this.node.y = this.vSize.height / 2 - 40;
- // this.node.opacity = 255;
- // this.status = 0;
- // this.shootBody.type = cc.RigidBodyType.Static;
- },
- start () {
- },
- update (dt) {
-
- },
- });
|