Bonsoir, je n'ai pas vraiment l'habitude de demander de l'aide sur un probleme qui me semble aussi "simple" mais comme je n'arrive pas a trouver la solution et que je viens de commencer le C#, je me dis que c'est simplement parce que j'ai encore un peu de mal en C#: alors voila, j'ai commencé hier un zelda nes - like avec monogame et je souhaite afficher le nombre de bombes et de clefs recupérées par le joueur, et je modifie les valeurs dans cette classe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | using Microsoft.Xna.Framework; using RogueLikeZelda.menu; using Microsoft.Xna.Framework.Input; using System; using Microsoft.Xna.Framework.Graphics; using RogueLikeZelda.resources; namespace RogueLikeZelda { public class EntityPlayer : LivingEntity { //FIELDS private int bombsCount; private int keysCount; //CONSTRUCTOR public EntityPlayer(int x = 0 , int y = 0) : base(new Sprite("link", x, y, 4, 2),16 ,1 , x, y) { this.currentLife = 1; this.keysCount = 0; this.bombsCount = 0; } //PROPERTIES public int GetKeys { get { return this.bombsCount; } } public int GetBombs { get { return this.keysCount; } } //METHODS public override bool OnCollision(Entity other) { if (other is EntityItem) { EntityItem item = (EntityItem)other; item.PickupItem(this); } return false; } public void AddKey(int amount) { this.keysCount += amount; Console.WriteLine("key added"); } public void AddBombs(int amount) { this.bombsCount += amount; Console.WriteLine("bombs added"); } //UPDATE & DRAW public override void UpdateChildren(GameTime gameTime, Input input) { this.bombsCount += 1; if (input.IsKeyDown(Keys.Z)) this.Move(0, -this.moveSpeed); if (input.IsKeyDown(Keys.S)) this.Move(0, this.moveSpeed); if (input.IsKeyDown(Keys.Q)) this.Move(-this.moveSpeed, 0); if (input.IsKeyDown(Keys.D)) this.Move(this.moveSpeed, 0); this.UpdateSpriteAnimation(); } } } |
EntityPlayer.cs
et ensuite j'affiche mon Gui dans mon instance en cours:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using RogueLikeZelda.menu; using RogueLikeZelda.resources; using System; namespace RogueLikeZelda { class MenuGame : MenuBase { //FIELDS private Room currentRoom; private EntityPlayer player; private Sprite gui; //CONSTRUCTOR public MenuGame() : base() { this.currentRoom = new Room(); this.player = new EntityPlayer(); this.gui = new Sprite("gui", 0, 0); this.currentRoom.Spawn(new EntityPlayer(), 1, 1); this.currentRoom.PlaceItem(new ItemKey(), 5, 4); this.currentRoom.PlaceItem(new ItemBomb(), 5, 2); } //UPDATE & DRAW public override void Update(GameTime gameTime, Input input) { this.currentRoom.Update(gameTime, input); } public override void Draw(SpriteBatch spriteBatch) { this.currentRoom.Draw(spriteBatch); this.gui.Draw(spriteBatch ); spriteBatch.DrawString(Resources.fonts["font"], this.player.GetKeys.ToString(), new Vector2(104, 32), Color.White); spriteBatch.DrawString(Resources.fonts["font"], this.player.GetBombs.ToString(), new Vector2(104, 40), Color.White); int i = 0; int offsetY = 0; for (; i < this.player.CurrentLife; ++i) { spriteBatch.Draw(Resources.images["heart"], new Vector2(176 + ((i % 8) * 8), 40 + offsetY), Color.Red); if (i == 7) offsetY = -8; } for (; i < this.player.MaxLife; ++i) { spriteBatch.Draw(Resources.images["heart"], new Vector2(176 + ((i % 8) * 8), 40 + offsetY), Color.Aquamarine); if (i == 7) offsetY = -8; } } } } |
MenuGame.cs
Le soucis, c'est que quand je tente d'acceder a ces valeurs dans ma classe EntityPlayer.cs pas de soucis, mais par contre depuis MenuGame.cs je n'arrive à avoir les changements (a afficher tout le temps 0 même quand
1 2 3 4 5 | public void AddBombs(int amount) { this.bombsCount += amount; Console.WriteLine("bombs added"); } |
est appelé par exemple). Est-ce que mon code est faux, un problème d'algo ou une étourderie car même avec l'outil debug de VS je n'ai rien trouvé mais c'est peut être parce que je débute en C#?