碰撞物理P2和Arcade无法正常工作

时间:2016-09-01 18:03:40

标签: physics collision phaser-framework

大家好,所以我有一个小问题,基本上我是想杀死一个移动的精灵,如果它是从左到右或从右到左都没关系,但是我想要杀死的只是一个碰撞和不是整个组,所以要测试去最右边拍摄块,你会看到新块消失但不是碰撞的那个可能我可以在下面提供我的game.js但我创建了一个你的演示版可以下载和测试,以更好地感受我的问题,请帮助,谢谢。

Link to Demo

BasicGame.Game = function (game) {

    //  When a State is added to Phaser it automatically has the following properties set on it, even if they already exist:

    this.game;      //  a reference to the currently running game (Phaser.Game)
    this.add;       //  used to add sprites, text, groups, etc (Phaser.GameObjectFactory)
    this.camera;    //  a reference to the game camera (Phaser.Camera)
    this.cache;     //  the game cache (Phaser.Cache)
    this.input;     //  the global input manager. You can access this.input.keyboard, this.input.mouse, as well from it. (Phaser.Input)
    this.load;      //  for preloading assets (Phaser.Loader)
    this.math;      //  lots of useful common math operations (Phaser.Math)
    this.sound;     //  the sound manager - add a sound, play one, set-up markers, etc (Phaser.SoundManager)
    this.stage;     //  the game stage (Phaser.Stage)
    this.time;      //  the clock (Phaser.Time)
    this.tweens;    //  the tween manager (Phaser.TweenManager)
    this.state;     //  the state manager (Phaser.StateManager)
    this.world;     //  the game world (Phaser.World)
    this.particles; //  the particle manager (Phaser.Particles)
    this.physics;   //  the physics manager (Phaser.Physics)
    this.rnd;       //  the repeatable random number generator (Phaser.RandomDataGenerator)

    //  You can use any of these from any function within this State.
    //  But do consider them as being 'reserved words', i.e. don't create a property for your own game called "world" or you'll over-write the world reference.
    
     this.bulletTimer = 0;

};

BasicGame.Game.prototype = {

    create: function () {

			                //Enable physics
        
// Set the physics system
			this.game.physics.startSystem(Phaser.Physics.ARCADE);
        
        
        //End of physics 
	
	
        //  Honestly, just about anything could go here. It's YOUR game after all. Eat your heart out!
		
		 this.createBullets();
         this.createTanque();
		 this.makeOneBloque();
        
        this.timerBloques = this.time.events.loop(1500, this.makeBloques, this);
		
    },

    update: function () {

        
        if(this.game.input.activePointer.isDown){
            this.fireBullet();
        }
   
       this.game.physics.arcade.overlap(this.bullets, this.bloque, this.collisionBulletBloque, null, this);
        
	},
    
    createBullets: function() {
        
    this.bullets = this.game.add.group();
    this.bullets.enableBody = true;
    this.bullets.physicsBodyType = Phaser.Physics.ARCADE;
    this.bullets.createMultiple(100, 'bulletSprite');
    this.bullets.setAll('anchor.x', 0.5);
    this.bullets.setAll('anchor.y', 1);
    this.bullets.setAll('outOfBoundsKill', true);
    this.bullets.setAll('checkWorldBounds', true); 
        
       
    },
    
    fireBullet: function(){ 

   if (this.bulletTimer < this.game.time.time) {
            this.bulletTimer = this.game.time.time + 1400;
            this.bullet = this.bullets.getFirstExists(false);
        if (this.bullet) {
            this.bullet.reset(this.tanque.x, this.tanque.y - 20);
            this.bullet.body.velocity.y = -800;
            }
        }

    },
	
	    makeOneBloque: function(){
        
        this.bloquecs = ["bloqueSprite","bloquelSprite"];
         this.bloque = this.game.add.group();
       for (var i = 0; i < 4; i++){
         this.bloque.createMultiple(5, this.bloquecs[Math.floor(Math.random()*this.bloquecs.length)], 0, false);
      }
                     this.bloque.enableBody = true;
         this.game.physics.arcade.enable(this.bloque); 
        this.bloque.setAll('anchor.x', 0.5);
        this.bloque.setAll('anchor.y', 0.5);
        this.bloque.setAll('outOfBoundsKill', true);
        this.bloque.setAll('checkWorldBounds', true); 
        
        
    },
    
        makeBloques: function(){ 
  
         this.bloques = this.bloque.getFirstExists(false);
        if (this.bloques) {

            this.bloques.reset(0, 300);
                 this.bloques.body.kinematic = true;
                this.bloques.body.velocity.x = 500;
            }
        

    },

	    createTanque: function() {
    
        this.tanqueBounds = new Phaser.Rectangle(0, 600, 1024, 150);
        
        this.tanque = this.add.sprite(500, 700, 'tanqueSprite');
        this.tanque.inputEnabled = true;
        this.tanque.input.enableDrag(true);
        this.tanque.anchor.setTo(0.5,0.5);
        this.tanque.input.boundsRect = this.tanqueBounds;
    
        
    },
    
	    collisionBulletBloque: function(bullet, bloques) {
        
       this.bloques.kill();
        this.bullet.kill();
        
    },


    quitGame: function (pointer) {

        //  Here you should destroy anything you no longer need.
        //  Stop music, delete sprites, purge caches, free resources, all that good stuff.

        //  Then let's go back to the main menu.
        this.state.start('MainMenu');

    }

};

0 个答案:

没有答案