2017-11-22 1 views
-1

Ich mache ein Platformer-Spiel mit Monogame und Nez Ich habe eine Karte mit gekachelten Karteneditor erstellt und ich habe eine Spitze in der Karte, wo, wenn der Spieler kollidiert, verlieren sie das Leben. Ich habe einen Box Collider um den Spike gesetzt und der Spieler hat einen Box Collider, aber wenn der Spieler zum Box Collider um den Spike kommt, passiert er einfach und es findet keine Kollision statt. Ich habe die Kollisions-Prüfmethoden in Nez zum Beispiel if(playercollider.collidesWith(spikecollider, out collisionresult) dann ein Debuggen hinzugefügt, um zu sehen, ob eine Kollision passiert, aber es zeigt nichts. Ich werde jede Hilfe schätzen.Monogame Nez Kollisionserkennung

dies ist mein Code:

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

Es gibt zu wenig Code, um hier zu sehen, was passiert, bitte geben Sie weitere Informationen an. – Steven

Antwort

0

ich eine Arbeit um für diese gefunden zu haben. Ich habe gerade einen Konstruktor im Player-Controller erstellt und den Collider-Parameter hinzugefügt, dann im Player-Controller-Update nach Kollisionen gesucht und dann den Spike-Collider übergeben, als ich den Playercontroller als Komponente in der Klasse scene1 hinzugefügt habe.

hier ist der Code:

Collider other; 
CollisionResult result; 

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

dann diese in der Update-Methode des Spielers Controller

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

dann in der scene1 Klasse habe ich in der spikecollider als Parameter

passieren
player.addComponent(new PlayerController(spikeCollider)); 

jetzt kann ich Kollision erkennen.