Ich habe gelesen und verstanden, was der Fehler selbst bedeutet und im Allgemeinen wie man es löst, aber ich bin nicht sicher, wie in dem Fall wo Ich erstelle zwei verschiedene Sätze von Instanzen aus zwei verschiedenen Klassen (Vergleiche, ob zwei Rechtecke kollidieren), und wenn sie dies tun - verschiebe einen von den anderen.Nicht-statische Methode aus einem statischen Kontext [Vergleich zweier Klassen von Klasseninstanzen]
public class NPCManager {
public NPCManager(int amountNPC, int NPCGap) {
//
populateNPCS();
}
public void update() {
for(RectNPC NPC : monsters)
if(ObstacleManager.NPCCollide(NPC.getRectangle())) { //NPCCollide is the error
//
}
}
(oben) Dies ist die Klasse, die Instanzen von NPCs zu schaffen, sollte es jeden NPC überprüft unter Verwendung des Verfahrens gezeigt.
public class ObstacleManager {
public ObstacleManager(int playerGap, int obstacleGap, int obstacleHeight, int color, int doorcolor) {
populateObstacles();
}
public boolean NPCCollide(RectNPC NPC) {
for(Obstacle ob : obstacles) {
if(ob.NPCCollide(NPC))
return true;
}
return false;
}
(oben) Dies ist die Klasseninstanzen der Hindernisse zu schaffen, sollte es prüfen, ob die NPC kollidiert durch die unten.
public class Obstacle implements GameObject {
public Obstacle(int rectHeight, int color, int doorColor, int startX, int startY, int playerGap) {
//
}
public boolean NPCCollide(RectNPC NPC) {
/* Checks if the NPC inputted collides with the rectangles */;
}
(Above) Die Klasse für die Erstellung der Hindernisse selbst.
Die Manager werden verwendet, wenn das Spiel neu gestartet wird, kann es wie erwartet neu gestartet werden.
Sie müssen 'NPCCollide' auf einer Instanz von' ObstacleManager' nennen. Es hängt davon ab, ob das bedeutet, dass (1) 'update' dieses Objekt als Parameter nimmt, (2) es als Instanzfeld behält oder (3) das Objekt innerhalb von' update' erstellt. – 4castle