Vinnaren i pepparkakshustävlingen!
2016-04-15, 19:31
  #1
Medlem
robzints avatar
Tjena, håller på med att göra ett shoot em up spel i C#, har kommit en bra bit redan men får felkod när jag ska kompilera programmet nu.

Programmet klagar på följande: 'SpaceShooter.Player' does not contain a constructor that takes 5 arguments

och...

No overload for method 'Update' takes 1 arguments.

En del av koden:

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace SpaceShooter
{
    
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics; // Används för grafik
        SpriteBatch spriteBatch; // Används för att rita bilder
        Player player;
        List<Enemy> enemies;
        List<GoldCoin> goldCoins;
        Texture2D goldCoinSprite;
        PrintText printText;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }



        // Initialize(), anropas då spelet startar
        // Här ligger all kod för att initiera objekt och skapa dem
        protected override void Initialize()
        {
            goldCoins = new List<GoldCoin>();
            base.Initialize();
        }



        // LoadContent(), anropas då spelet startar
        // Här laddas alla objekt/filer in
        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            player = new Player(Content.Load<Texture2D>("images/player/ship"), 380, 400, 2.5f, 4.5f);
            enemies = new List<Enemy>();
            Random random = new Random();
            Texture2D tmpSprite = Content.Load<Texture2D>("images/enemies/spikeenemy");
            for (int i = 0; i < 5; i++)
            {
                int rndX = random.Next(0, Window.ClientBounds.Width - tmpSprite.Width);
                int rndY = random.Next(0, Window.ClientBounds.Height / 2);
                Spikeenemy temp = new Spikeenemy(tmpSprite, rndX, rndY);
                enemies.Add(temp);
            }


            tmpSprite = Content.Load<Texture2D>("images/enemies/tripod");
            for (int i = 0; i < 5; i++)
            {
                int rndX = random.Next(0, Window.ClientBounds.Width - tmpSprite.Width);
                int rndY = random.Next(0, Window.ClientBounds.Height / 2);
                Tripod temp = new Tripod(tmpSprite, rndX, rndY);
                enemies.Add(temp);
            }
                printText = new PrintText(Content.Load<SpriteFont>("myFont"));
                goldCoinSprite = Content.Load<Texture2D>("images/powerups/coin");
        }


        // UnloadContent(), anropas då spelet avslutas
        // Kan ladda ur de objekt som skulle kunna behöva det för att rensa minne
        protected override void UnloadContent()
        {
            
        }


        // Update(), läser in data från användaren, flyttar på olika objekt osv
        // gameTime, används för att hålla koll på spelets uppdateringsfrekves
        protected override void Update(GameTime gameTime)
        {
            Random random = new Random();
            int newCoin = random.Next(1, 200);
            if (newCoin == 1)
            {
                int rndX = random.Next(0, Window.ClientBounds.Width - goldCoinSprite.Width);
                int rndY = random.Next(0, Window.ClientBounds.Height - goldCoinSprite.Height);
                goldCoins.Add(new GoldCoin(goldCoinSprite, rndX, rndY, gameTime));
            }


           
            foreach (GoldCoin gc in goldCoins.ToList())
            {
                if(gc.IsAlive)
                {
                    gc.Update(gameTime);

                    if (gc.CheckCollision(player))
                    {
                        goldCoins.Remove(gc);
                    player.Points++;
                    }
                
                    
                }
                else
                goldCoins.Remove(gc);
            }
            
         
            

            // Stänger av spelet om man trycker på back-knappen
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();



            player.Update(Window);

            foreach (Enemy e in enemies.ToList())
            {
                if (e.IsAlive) // Kontrollera om fienden lever
                {
                    // Kontrollera kollision med spelaren:
                    if (e.CheckCollision(player))
                        this.Exit();
                    e.Update(Window); // Flytta på dem
                }                    
                else // Ta bort fienden för den är död
                    enemies.Remove(e);

                base.Update(gameTime);
            }


        }





        // Draw(), Här ritas själva spelet ut.
        // gameTime, används för att hålla kolla på spelets uppdateringsfrekvens

        protected override void Draw(GameTime gameTime)
        {
            // Rensa skärmen
            GraphicsDevice.Clear(Color.CornflowerBlue);



            // Använder spriteBatch för att rita ut saker på skärmen
            spriteBatch.Begin();
            foreach (GoldCoin gc in goldCoins)
                gc.Draw(spriteBatch);
            printText.Print("Points:" + player.Points, spriteBatch, 0, 0);
            player.Draw(spriteBatch);
            foreach (Enemy e in enemies) e.Draw(spriteBatch);
            spriteBatch.End();

           base.Draw(gameTime);
        }
    }
}


Bitarna programmet klagar på är:
Kod:
player = new Player(Content.Load<Texture2D>("images/player/ship"), 380, 400, 2.5f, 4.5f);

och...

Kod:
player.Update(Window);


Är relativt ny på programmering och har suttit ett par timmar med att försöka lista ut detta men jag blir inte klokare.

Tacksam för svar.

Mvh
Citera
2016-04-15, 19:40
  #2
Medlem
AquaRegias avatar
Är inte felmeddelandena rätt självförklarande? Du anropar en konstruktor samt metod som inte finns.
Citera
2016-04-15, 20:38
  #3
Medlem
robzints avatar
Problem löst.
Citera
2016-04-16, 22:24
  #4
Medlem
Alkyonioss avatar
Citat:
Ursprungligen postat av robzint
Tjena, håller på med att göra ett shoot em up spel i C#, har kommit en bra bit redan men får felkod när jag ska kompilera programmet nu.

Programmet klagar på följande: 'SpaceShooter.Player' does not contain a constructor that takes 5 arguments

och...

No overload for method 'Update' takes 1 arguments.

En del av koden:

Kod:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

namespace SpaceShooter
{
    
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics; // Används för grafik
        SpriteBatch spriteBatch; // Används för att rita bilder
        Player player;
        List<Enemy> enemies;
        List<GoldCoin> goldCoins;
        Texture2D goldCoinSprite;
        PrintText printText;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }



        // Initialize(), anropas då spelet startar
        // Här ligger all kod för att initiera objekt och skapa dem
        protected override void Initialize()
        {
            goldCoins = new List<GoldCoin>();
            base.Initialize();
        }



        // LoadContent(), anropas då spelet startar
        // Här laddas alla objekt/filer in
        protected override void LoadContent()
        {
            spriteBatch = new SpriteBatch(GraphicsDevice);
            player = new Player(Content.Load<Texture2D>("images/player/ship"), 380, 400, 2.5f, 4.5f);
            enemies = new List<Enemy>();
            Random random = new Random();
            Texture2D tmpSprite = Content.Load<Texture2D>("images/enemies/spikeenemy");
            for (int i = 0; i < 5; i++)
            {
                int rndX = random.Next(0, Window.ClientBounds.Width - tmpSprite.Width);
                int rndY = random.Next(0, Window.ClientBounds.Height / 2);
                Spikeenemy temp = new Spikeenemy(tmpSprite, rndX, rndY);
                enemies.Add(temp);
            }


            tmpSprite = Content.Load<Texture2D>("images/enemies/tripod");
            for (int i = 0; i < 5; i++)
            {
                int rndX = random.Next(0, Window.ClientBounds.Width - tmpSprite.Width);
                int rndY = random.Next(0, Window.ClientBounds.Height / 2);
                Tripod temp = new Tripod(tmpSprite, rndX, rndY);
                enemies.Add(temp);
            }
                printText = new PrintText(Content.Load<SpriteFont>("myFont"));
                goldCoinSprite = Content.Load<Texture2D>("images/powerups/coin");
        }


        // UnloadContent(), anropas då spelet avslutas
        // Kan ladda ur de objekt som skulle kunna behöva det för att rensa minne
        protected override void UnloadContent()
        {
            
        }


        // Update(), läser in data från användaren, flyttar på olika objekt osv
        // gameTime, används för att hålla koll på spelets uppdateringsfrekves
        protected override void Update(GameTime gameTime)
        {
            Random random = new Random();
            int newCoin = random.Next(1, 200);
            if (newCoin == 1)
            {
                int rndX = random.Next(0, Window.ClientBounds.Width - goldCoinSprite.Width);
                int rndY = random.Next(0, Window.ClientBounds.Height - goldCoinSprite.Height);
                goldCoins.Add(new GoldCoin(goldCoinSprite, rndX, rndY, gameTime));
            }


           
            foreach (GoldCoin gc in goldCoins.ToList())
            {
                if(gc.IsAlive)
                {
                    gc.Update(gameTime);

                    if (gc.CheckCollision(player))
                    {
                        goldCoins.Remove(gc);
                    player.Points++;
                    }
                
                    
                }
                else
                goldCoins.Remove(gc);
            }
            
         
            

            // Stänger av spelet om man trycker på back-knappen
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();



            player.Update(Window);

            foreach (Enemy e in enemies.ToList())
            {
                if (e.IsAlive) // Kontrollera om fienden lever
                {
                    // Kontrollera kollision med spelaren:
                    if (e.CheckCollision(player))
                        this.Exit();
                    e.Update(Window); // Flytta på dem
                }                    
                else // Ta bort fienden för den är död
                    enemies.Remove(e);

                base.Update(gameTime);
            }


        }





        // Draw(), Här ritas själva spelet ut.
        // gameTime, används för att hålla kolla på spelets uppdateringsfrekvens

        protected override void Draw(GameTime gameTime)
        {
            // Rensa skärmen
            GraphicsDevice.Clear(Color.CornflowerBlue);



            // Använder spriteBatch för att rita ut saker på skärmen
            spriteBatch.Begin();
            foreach (GoldCoin gc in goldCoins)
                gc.Draw(spriteBatch);
            printText.Print("Points:" + player.Points, spriteBatch, 0, 0);
            player.Draw(spriteBatch);
            foreach (Enemy e in enemies) e.Draw(spriteBatch);
            spriteBatch.End();

           base.Draw(gameTime);
        }
    }
}


Bitarna programmet klagar på är:
Kod:
player = new Player(Content.Load<Texture2D>("images/player/ship"), 380, 400, 2.5f, 4.5f);

och...

Kod:
player.Update(Window);


Är relativt ny på programmering och har suttit ett par timmar med att försöka lista ut detta men jag blir inte klokare.

Tacksam för svar.

Mvh

Är inte XNA nerlagt?
Citera
2016-04-22, 10:27
  #5
Medlem
Meeis avatar
Citat:
Ursprungligen postat av Alkyonios
Är inte XNA nerlagt?

Ja XNA dog för några år sedan. Men som tur är så har några jobbat vidare med en egen implementation som baseras på XNA 4.0. Det kallas MonoGame (http://www.monogame.net/) och funkar faktiskt riktigt bra, jag kunde hoppa direkt från XNA till det här utan större problem.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback