不能使用另一个 class 的方法?
Can't use method from another class?
我知道还有其他线程具有类似的标题,但我已经完成了这些线程中建议的所有操作。
我正在尝试制作一款名为 Fossil Fuels 的恐龙赛车游戏,目前我正在制作一款通用游戏,其中的障碍物从顶部飘下来,需要避开。
我确实知道 Python,并且最近才开始学习 Java,所以这个问题听起来可能很愚蠢,但还是来吧。
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import java.lang.System;
import java.util.ArrayList;
import java.lang.Math;
public class MainLoop
{
public static void main(String [] args)
{
boolean mloop = true;
int obsMoveIncrease = 1;
ArrayList obsList = new ArrayList();
final String[] validObsTypes = {"tree", "rock", "bush"};
long moveFrequency = 750;
long beginningTime = System.currentTimeMillis();
long obsInterval = 3000; //how often a new object is created in milliseconds
long timeOfLastMove = System.currentTimeMillis();
JFrame frame = new JFrame();
ImageIcon background = new ImageIcon("background.jpg"); //background is 700 by 1500 px
JLabel bgLabel = new JLabel(background);
frame.add(bgLabel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
while (mloop)
{
int freshObsTypeNum = (int) Math.random() * 3;
String freshObsType = validObsTypes[freshObsTypeNum]; //chooses a pseudo-random valid obstacle type
if (System.currentTimeMillis() >= beginningTime + obsInterval)
{ //checks if sufficient time has passed since last obstacle was created
Obstacle obs = new Obstacle(freshObsType, 0);
obsList.add(0, obs);
beginningTime = System.currentTimeMillis(); //resets "clock"
}
if (System.currentTimeMillis() >= timeOfLastMove + moveFrequency) //checks if it is time to move obstacles
{
timeOfLastMove = System.currentTimeMillis();
for (int i = 0; i < obsList.size(); i++)
{
obsList.get(i).moveObs(obsMoveIncrease); //moves obstacles ERROR OCCURS ON moveObs
if (obsList.get(i).getObsY() > 1500)
{
obsList.remove(i);
}
}
}
}
}
}
这是我的障碍class:
import java.util.Arrays;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Obstacle
{
private String obstacleType;
private int obstacleXPos;
public final int[] obsXlist = {0, 175, 350, 525}; //list of starting positions (4 slots along the x axis)
int obstacleYPos = 0;
public Obstacle(String type, int startPos)
{
obstacleType = type;
obstacleXPos = obsXlist[startPos];
}
public int getObsX()
{return obstacleXPos;}
public int getObsY()
{return obstacleYPos;}
public void moveObs(int increase)
{obstacleYPos += increase;}
ImageIcon obstacleImg;
public JLabel getObsImg() //gets image (on a label) for keyword given to constructor
{
if (obstacleType.equals("tree"))
obstacleImg = new ImageIcon("treeObs.jpg");
else if (obstacleType.equals("rock"))
obstacleImg = new ImageIcon("rockObs.jpg");
else if (obstacleType.equals("bush"))
obstacleImg = new ImageIcon("bushObs.jpg");
else
System.out.println(obstacleType + " is not a valid obstacle type");
JLabel obsLabel = new JLabel(obstacleImg);
return obsLabel;
}
}
它告诉我当我从 main 方法中调用 moveObs(int) 时找不到符号。我不知道为什么我无法访问 Obstacle class
中的 public 方法
obsList 没有类型。
您正在尝试在 'Object' 上调用 moveObs(),而不是在 'Obstacle'.
上
要更改它,您需要使 obsList 成为这样的类型化列表:
ArrayList<Obstacle> obsList = new ArrayList<>();
我知道还有其他线程具有类似的标题,但我已经完成了这些线程中建议的所有操作。
我正在尝试制作一款名为 Fossil Fuels 的恐龙赛车游戏,目前我正在制作一款通用游戏,其中的障碍物从顶部飘下来,需要避开。
我确实知道 Python,并且最近才开始学习 Java,所以这个问题听起来可能很愚蠢,但还是来吧。
import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import java.lang.System;
import java.util.ArrayList;
import java.lang.Math;
public class MainLoop
{
public static void main(String [] args)
{
boolean mloop = true;
int obsMoveIncrease = 1;
ArrayList obsList = new ArrayList();
final String[] validObsTypes = {"tree", "rock", "bush"};
long moveFrequency = 750;
long beginningTime = System.currentTimeMillis();
long obsInterval = 3000; //how often a new object is created in milliseconds
long timeOfLastMove = System.currentTimeMillis();
JFrame frame = new JFrame();
ImageIcon background = new ImageIcon("background.jpg"); //background is 700 by 1500 px
JLabel bgLabel = new JLabel(background);
frame.add(bgLabel);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
while (mloop)
{
int freshObsTypeNum = (int) Math.random() * 3;
String freshObsType = validObsTypes[freshObsTypeNum]; //chooses a pseudo-random valid obstacle type
if (System.currentTimeMillis() >= beginningTime + obsInterval)
{ //checks if sufficient time has passed since last obstacle was created
Obstacle obs = new Obstacle(freshObsType, 0);
obsList.add(0, obs);
beginningTime = System.currentTimeMillis(); //resets "clock"
}
if (System.currentTimeMillis() >= timeOfLastMove + moveFrequency) //checks if it is time to move obstacles
{
timeOfLastMove = System.currentTimeMillis();
for (int i = 0; i < obsList.size(); i++)
{
obsList.get(i).moveObs(obsMoveIncrease); //moves obstacles ERROR OCCURS ON moveObs
if (obsList.get(i).getObsY() > 1500)
{
obsList.remove(i);
}
}
}
}
}
}
这是我的障碍class:
import java.util.Arrays;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Obstacle
{
private String obstacleType;
private int obstacleXPos;
public final int[] obsXlist = {0, 175, 350, 525}; //list of starting positions (4 slots along the x axis)
int obstacleYPos = 0;
public Obstacle(String type, int startPos)
{
obstacleType = type;
obstacleXPos = obsXlist[startPos];
}
public int getObsX()
{return obstacleXPos;}
public int getObsY()
{return obstacleYPos;}
public void moveObs(int increase)
{obstacleYPos += increase;}
ImageIcon obstacleImg;
public JLabel getObsImg() //gets image (on a label) for keyword given to constructor
{
if (obstacleType.equals("tree"))
obstacleImg = new ImageIcon("treeObs.jpg");
else if (obstacleType.equals("rock"))
obstacleImg = new ImageIcon("rockObs.jpg");
else if (obstacleType.equals("bush"))
obstacleImg = new ImageIcon("bushObs.jpg");
else
System.out.println(obstacleType + " is not a valid obstacle type");
JLabel obsLabel = new JLabel(obstacleImg);
return obsLabel;
}
}
它告诉我当我从 main 方法中调用 moveObs(int) 时找不到符号。我不知道为什么我无法访问 Obstacle class
中的 public 方法obsList 没有类型。 您正在尝试在 'Object' 上调用 moveObs(),而不是在 'Obstacle'.
上要更改它,您需要使 obsList 成为这样的类型化列表:
ArrayList<Obstacle> obsList = new ArrayList<>();