user3661668
user3661668

Reputation: 11

Incorrect number of arguments. Expected 2

I'm making a game where you are a soccer goalie and the ball(brazuca) keeps on falling down and you have to collect it, but I keep getting the incorrect number of arguments error. I'm fairly new to coding and I know that the error means something unexpected happened in the brackets where the error happened but I can't figure out how to fix it. It would be great if anyone can help me with this issue.

class Gamescreen2

package
{
    import flash.display.MovieClip;
    import flash.utils.Timer;
    import flash.events.*;
    import flash.ui.Mouse;
    import flash.media.SoundChannel;

    public class Gamescreen2 extends MovieClip
    {
        public var goalie:GoaliePlay;

        var gameMusic:GameMusic;
        var gameChannel:SoundChannel;
        var speed:Number;

        //public var army:Array;
        public var army2:Array;
        //public var gameTimer:Timer;
        public var gameTimer2:Timer;
        public static var tick:Number;
        public static var score:Number;

        public function Gamescreen2()
        {
            goalie = new GoaliePlay();
            addChild (goalie);

            gameMusic = new GameMusic;
            gameChannel = gameMusic.play(0,999);
            score = 0;

            //army = new Array();
            army2 = new Array();

            //gameTimer = new Timer(25);
            gameTimer2 = new Timer(25);
            //gameTimer.addEventListener(TimerEvent.TIMER, onTick);
            gameTimer2.addEventListener(TimerEvent.TIMER, onTick);
            gameTimer2.start();

            tick = 0;
        }

        public function onTick(timerEvent:TimerEvent):void
        {
            tick ++;

            if (Math.random() < 0.05)
            {
                var randomX:Number = Math.random() * 550;
                var goalieB= new GoalieB(0,0);
                army2.push (goalieB);
                addChild (goalieB);
            }

            for each (var goalieB:GoalieB in army2)
            {
                goalieB.moveDownABit();

                if(goalieB.y == 420)
                {
                    score--
                    trace(score);
                    this.scoreTxttwo.text = score.toString();
                }

                if (goalie.collisionArea.hitTestObject(goalieB))
                {
                    goalieB.x == 550;
                    score += 10;
                }
                if (score < 1)
                {
                    score = 0;
                }
            }
        }
    }
}

class BrazucaPlay

package
{
    import flash.display.MovieClip;

    public class BrazucaPlay extends MovieClip

    {
        var speed:Number;

        public function BrazucaPlay(startX:Number, startY:Number)
        {
            x = startX;
            y = startY;
            speed = Math.random();
        }

        public function moveDownABit():void
        {
            //two speed enemies
            if (speed >= .25)
            {
                y = y + 3;
            }
        }
    }
}

Upvotes: 0

Views: 3336

Answers (2)

BadFeelingAboutThis
BadFeelingAboutThis

Reputation: 14406

Might be the constructor of your GameMusic class.

gameMusic = new GameMusic;

You should have brackets like so:

gameMusic = new GameMusic();

Same with this line:

var newBrazuca = new BrazucaPlay;

Should be:

var newBrazuca = new BrazucaPlay();

If, after adding brackets () you still receive the error, then you should check your custom classes BrazucaPlay and GoaliePlay and make sure their constructors aren't expecting parameters. Also check this function: brazuca.moveDownABitB().

The constructor is the function that is named after the class and is what first runs when instantiate an object. So you do var newBrazuca = new BrazucaPlay(); there is a constructor function in the BrazucaPlay class that would look something like this:

public function BrazucaPlay(){
    //some code.
}

If that function actually looked something like this:

public function BrazucaPlay(myParameter:String){ }

Then that would throw the error you're getting because it's expecting you to pass a parameter to it (in this case a string like new BrazucaPlay("blah blah blah"))

EDIT

Now that you've posted more code, the cause is quite clear. The constructor of your BrazucaPlay class is expecting two arguments (a starting x/y position). So when you instantiate a new BrazucaPlay instance, you are required to pass it those two parameters:

var newBrazuca = new BrazucaPlay(0,0);//you need to pass two numbers (starting x and y)

If you don't want to do this, you can change the code to make those parameter OPTIONAL.

 //this makes the parameters default to 0 if no value is passed in
 public function BrazucaPlay(startX:Number = 0, startY:Number = 0)
 {
    x = startX;
    y = startY;

    speed = Math.random();
 }

Upvotes: 1

CodeMouse92
CodeMouse92

Reputation: 6898

Welcome, user. Okay, a couple of things...

First, just so you know, we need the entire error, as CyanAngel said. It helps us prevent digging through the entire code. (For more tips about getting started, go to stackoverflow.com/help)

Second, this is what your error message means: You are passing the wrong number of arguments (values) to a function. The function requires exactly two, and you're passing more or less than you should.

This is why we need the error: it has the line number of the error, letting us/you narrow in on it directly.

Upvotes: 0

Related Questions