비슷한 제목을 가진 다른 스레드가 있다는 것을 알고 있지만 해당 스레드에서 제안 된 모든 작업을 수행했습니다.다른 클래스의 메서드를 사용할 수 없습니까?
나는 화석 연료라고 불리는 공룡 경주 게임을 만들려고하고 있습니다. 지금은 피할 필요가있는 장애물이있는 일반적인 게임을 만들고 있습니다.
저는 파이썬을 알고 있으며, 최근에 자바를 배우기 시작했습니다. 그래서이 질문은 아마도 어리석은 것처럼 들릴지 모르지만, 여기에 있습니다.
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);
}
}
}
}
}
}
여기 내 장애물 클래스 :
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)를 호출 할 때 기호를 찾을 수 없음을 나에게 말하고있다. 왜 장애 클래스에서 내 공개 메소드에 액세스 할 수 없는지 모르겠다.
는'ArrayList를 obsList' 같은 일을보십시오 : 는이 같은 입력 된 목록을 obsList 할 필요가 있음을 변경하려면 그 물체들. –
csmckelvey
제네릭을 사용하도록 ArrayList 정의를 변경하십시오. ArrayList obsList = new ArrayList (); –
방금 시도했지만 문제가 해결되었지만 작동은 왜 되었습니까? 목록에있는 항목의 유형을 이미 알고 있어야하지 않습니다. –