請教關於Collision 和 Touch_Move

我想做一隻好像如下的遊戲:

我的player 就是它移動的主木

它是由左向右移, 但我的是由下向上移.

目標/問題:我想把 原本能向上下移動的player, 不能向前活動 (可向下).
首先我利用 Touch_Move 去移動本塊.
跟著利用 onCollisionEnter 去detect 碰撞, 如找到 self.collider = true,

onLoad: function () {
var self = this;
self.isMoving = false;
self.success = false;

    cc.director.getCollisionManager().enabled = true;
    cc.director.getCollisionManager().enabledDebugDraw = true;

    self.moveToPos = cc.p(self.player.position.x, self.player.position.y);

    self.player.on(cc.Node.EventType.TOUCH_START, function (event) {
        var touches = event.getTouches();
        var touchLoc = touches[0].getLocation();
        self.active = "player";

        self.isMoving = true;
        self.moveToPos = self.player.parent.convertToNodeSpaceAR(touchLoc);

        self.blocks.stopAllAnimation();
        self.player.getComponent(cc.Animation).play();            
    }, self.node);

    self.player.on(cc.Node.EventType.TOUCH_MOVE, function (event) {        
        var touches = event.getTouches();
        var touchLoc = touches[0].getLocation();

        self.isMoving = true;
        self.moveToPos = self.player.parent.convertToNodeSpaceAR(touchLoc);

    }, self.node);

    self.player.on(cc.Node.EventType.TOUCH_END, function (event) {
        self.isMoving = false;
    }, self.node);
},

onCollisionEnter: function (other, self) {
    this.node.color = cc.Color.RED;
    this.collided = true;
},

update: function (dt) {
    if (!this.isMoving) return;

    // Check Collision
    var rect1 = this.exitTop.getBoundingBox();
    var rect2 = this.player.getBoundingBox();

    if (cc.rectIntersectsRect(rect1, rect2)) {
        this.success = true;
    }

    // check if Player is reach to exit
    if (this.success && this.player.position.y <= this.exitTop.position.y) {
        this.movingSpeed = 400;
        this.player.setPosition(this.player.x, this.player.y + this.movingSpeed * dt);
    }

    console.log(this.collided);   ********* 這code 不停 在console return true, false, true, false, ....etc

   if (!this.collided) {
      // movement of Player
    if (!this.success && parseInt(this.moveToPos.y) >= this.exitBottom.position.y) {
        this.player.setPosition(this.player.x, this.moveToPos.y);
    }
   }

},

急, 多謝.

你是不是想问:

原本一个矩形 node,可以上下拖拽移动,在某些情况下,上面有东西顶住了,想让他不能向上移动,只能往下拉?

这样的话没必要用到 Collision。

其实你这个整个游戏,暂且称呼为一个棋盘,这整个棋盘就是一个 6x6 的矩阵。用一个 2 维数组去存储这个矩阵的占用状态,这样在拖拽的时候,比如 A2 拖向 A1 的时候,去判断数组内 Array[0][0] 是否被占用,被占用就无视拖拽,记录 x、y 的偏移量,用于用户拖拽操作回来的时候的坐标修正就行了。

1赞

問題已解決, 感謝.