2017-11-22 16 views
-1

私はmonogameとnezでplatformerゲームを作っています。私はタイルマップエディタを使ってマップを作成しました。そして、プレイヤーが衝突した場合、それらは緩やかな生活をします。私はスパイクの周りにボックスコライダーを設定し、プレーヤーはボックスコライダーを持っていますが、プレーヤーがスパイクの周りのコライダーに達すると、それはちょうど通過し、衝突は起こりません。私は、例えば、if(playercollider.collidesWith(spikecollider, out collisionresult)のようなnezの衝突チェックメソッドを使用して、衝突が発生しても何も表示されないかどうかを確認するためにデバッグを追加しました。私はどんな助けにも感謝します。Monogame Nez衝突検出

これは私のコードです:

class Scene1 : Scene 
{ 
    TiledMap tiledMap; 

    public override void initialize() 
    { 
     addRenderer(new DefaultRenderer()); 
     //setDesignResolution(800, 480, Scene.SceneResolutionPolicy.ShowAllPixelPerfect); 
     Screen.setSize(800 * 2, 480 * 2); 


     tiledMap = content.Load<TiledMap>("scene_01"); 
     var objectLayer = tiledMap.getObjectGroup("entities"); 
     var playerSpawn = objectLayer.objectWithName("Player Spawn"); 
     var spikesPos = objectLayer.objectWithName("spike"); 


     var tiledEntity = createEntity("tiled map"); 
     tiledEntity.addComponent(new TiledMapComponent(tiledMap, "collisions")); 

     var deadly = tiledMap.getLayer("deadly"); 

     var spikes = createEntity("spikes"); 
     spikes.setPosition(spikesPos.x, spikesPos.y); 
     var spikeCollider = spikes.addComponent(new BoxCollider(2, 4, 110, 24)); 
     //spikes.addComponent(new TriggerListener()); 
     //spikes.addComponent(new ProjectileMover()); 


     // setup our camera bounds with a 1 tile border around the edges (for the outside collision tiles) 
     tiledEntity.addComponent(new CameraBounds(new Vector2(-tiledMap.width * 6, -tiledMap.height), new Vector2(tiledMap.width * (tiledMap.tileWidth + 6), tiledMap.tileHeight * (tiledMap.height + 2.4f)))); 

     var player = createEntity("player"); 
     player.setPosition(playerSpawn.x, playerSpawn.y); 
     player.addComponent(new PlayerController()); 
     player.addComponent(new TiledMapMover(tiledMap.getLayer<TiledTileLayer>("collisions"))); 
     player.addComponent(new PlayerDamageDetector()); 
     var playerCollider = player.addComponent(new BoxCollider(-18,6, 32, 32)); 


     CollisionResult result; 
     var playerhealth = player.getComponent<PlayerController>().health; 
     if (playerCollider.collidesWith(spikeCollider, out result)) 
     { 
      playerhealth--; 
      Debug.log("Collision: {0}", result); 
     } 


     // add a component to have the Camera follow the player 
     camera.entity.addComponent(new FollowCamera(player)); 


    } 
} 
+0

何が起こっているのかを理解するにはここをクリックするコードがあまりにも少ないので、詳しい情報を提供してください。 – Steven

答えて

0

私はこのために周りの仕事を見つけました。私はちょうどプレーヤーコントローラーのコンストラクターを作成し、プレーヤーのコントローラーの更新で衝突をチェックしてから、scene1クラスのコンポーネントとしてplayercontrollerを追加したときにスパイクコライダーを渡しました。ここで

コードは次のとおり

Collider other; 
CollisionResult result; 

public PlayerController(Collider collider) 
{ 
    this.other = collider; 
} 

次いでSCENE1クラスでIは、パラメータ

としてspikecollider渡すプレイヤコントローラ

if (boxCollider.collidesWith(other, out result)) 
      Debug.log("Collision : {0} Results {1}", other, result); 

の更新方法でこれを添加

player.addComponent(new PlayerController(spikeCollider)); 

今、私は衝突を検出することができます。