Search code examples
javabluej

Calling method from another class to get x and y issue


Apologies if the title is not appropriate, was having trouble what to call this.

Scenario: I have a universe type project in java where there are different types of things you can find in a universe (stars, planets, comets etc).

This is part of my university coursework and I'm stuck on one part

I have a class called Space_Object which is a superclass and all things found in the universe inherit it. The superclass has variables such as xPosition, yPosition.

I am currently stuck on trying to get planets to orbit around stars. I am trying to get the x,y coordinates of a star so that the planet can orbit around it (there can be multiple planets and stars). Right now I am passing the star that the planet will orbit around as a field whenever making a new planet.

I created getters inside of Planet to retrieve the x,y of the Star (which works). I am stuck on how can I use that x and y to alter the starting point of the planet. This is what I added to Universe class:

public void setCoordsOfPlanet(Planet planetObj)
{
    planetObj.xPosition = planetObj.getSolarSystemX();
}

Which gave me an error of:

xPosition has private access in Space_Object

I am not allowed to make any of the fields public.

Planet class:

public class Planet extends Space_Object
{
private int distanceFromStar;
private int orbitSpeed;
static Star solarSystem;


public Planet(int disFromStar, int orbSpeed, Star solSystem, int objectDiameter, Color objectColor, Universe theUniverse)
{

    super(0, 0, 0, 0, objectDiameter, objectColor, theUniverse);
    distanceFromStar = disFromStar;
    orbitSpeed = orbSpeed;
    solarSystem = solSystem;     
}

public int getSolarSystemX ()
{
     return solarSystem.getXPosition();
}

public int getSolarSystemY ()
{
    return solarSystem.getYPosition();
}
}

Just in case, the Space_Object constructor:

public Space_Object(int xPos, int yPos, int xVel, int yVel, int objectDiameter, Color objectColor, Universe theUniverse)
{
    xPosition = xPos;
    yPosition = yPos;
    xSpeed = xVel;
    ySpeed = yVel;
    color = objectColor;
    diameter = objectDiameter;
    universe = theUniverse;
    universeHeight = universe.getUniverseHeight();
    universeWidth = universe.getUniverseWidth();
    lifeTime = 1000000;

}

Am I approaching this from the completely wrong angle? I been trying to change things regarding this matter for past three hours and made no progress - any help is appreciated. If you need more code let me know.

PS: All items in the universe are objects and are represented as colour circles on a canvas.


Solution

  • If you are asking how do I modify private fields from another class: then all you need to do is to add setter methods in your Space_Object or Planet class, for example:

    public class Planet {
    ...
    public setCoor(int x, int y) {
        this.xPosition = x;
        this.yPosition = y;
    }
    }
    

    Now you can call this method from the Star class: planet.setCoor(x, y)

    If you want this method to only be accessible from classes of the same package only, remove public.