Bu başlık oldukça iyi ifade ettiğimi ifade etmiyor, özür dilerim, ancak daha iyi ifade etmem benim için zor, çünkü OOP eksikliğinden dolayı neler olduğunu anlayamıyorum bilgi ve tecrübe.Java'da süper alt sınıf değişkenini inherit in
Oyuncunun 'badGuy' sprite tarafından kovalanan 'kahraman' sprite ile bir tahta etrafında koşacak olan temel bir oyun yapıyorum. İki sprite 5-6 yöntemi paylaştığından, süper bir 'Sprite' ve iki sınıf 'Hero'nun Sprite' ve 'BadGuy'un Sprite'i genişletmesini' sağlamaya karar verdim. Şimdi böyle şeyler dahil olmak üzere tüm bu süper yöntemleri için:
getX(); getY(); getBounds(); render();
Ben 'Hero' ve 'Badguy' konumunu izlemek için süper sınıf gerekir çalışmak. Farklı başlangıç vermek istediğinizde sorun devreye giriyor
package game.sprites;
import javafx.scene.shape.Rectangle;
import javax.swing.*;
import java.awt.*;
public class Sprite {
public static int x;
public static int y;
private int imageWidth;
private int imageHeight;
public Image image;
public Sprite(int x, int y) {
Sprite.x = x;
Sprite.y = y;
}
public static void render(Graphics g, Image image) {
g.drawImage(image, x, y, null);
}
public Image loadImage(String filePath) {...}
public void getImageDimensions() {...}
public Rectangle getBounds() {
return new Rectangle(x, y, imageWidth, imageHeight);
}
public Image getImage() {
return image;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
}
'Hero' ve 'Badguy' nesnelere koordinatları: Yani böyle 'Sprite' uyguladı. Şu anda onları farklı ayarlarsanız, ikinci 'Sprite' çağrısı ilkini geçersiz kılar ve her ikisi de aynı noktada başlar (hedefiniz 'badGuy'dan çalıştırmaksa çok sinir bozucu olur). 'Kahraman' ve 'Badguy' şu anda bu şekilde başlatılır:
public class BadGuy extends Sprite {
public BadGuy() {
super(x, y);
initBadGuy();
}
public void initBadGuy() {
loadImage("resources/craft.gif");
getImageDimensions();
x = 860; // Hero x = 20;
y = 560; // Hero y = 20;
}
yüzden yapmaya çalıştığım şey alt sınıfları Sprite x ve y geçersiz hale getirilmesidir. Ama ben googled ve bu çok kötü bir fikir olduğunu anlıyorum ve bu yüzden mümkün değildir. Yani benim sorum şu gibi bir şeydir: 'Sprite' alt sınıfı 'x' ve 'y' değişkenlerini miras bırakabilir ve belirli alt sınıflar çağrıldığında gerekli yöntemleri uygulayabilirim.
Şimdi buna bakıyorum - hem kurucu hem de init <>() alt sınıflar için aynıdır, bu yüzden belki "Sprite" uygulamasında uygulanabilirler? Sadece bir düşünce, ama zaten kafam karıştı, bu yüzden hiç bir fikrim yok.
Teşekkürler.
sadece (int x, int y) yapıcı Hero eklemek ait Nesnesi oluşturmak istiyor ve Badguy nereden süper arama (x, y). – BigMike
Bunun nedeni, x ve y değişkenlerini sprite STATIC'de yapmış olmanızdır. Bu, değişkeni değiştiren herhangi bir alt sınıfın, bu değişikliğin diğerlerinde görülmesine neden olacağı anlamına gelir. Sadece onların korumalı yapmak ve alt sınıfları daha sonra 'x' ve' y' değişkenler 'static' yapmak YAPMAYIN – jr593
baş edebilecektir. Sınıfın örnek değişkenleri olmalılar. Her bir 'Sprite' nesnesini izlemelidirler. Ayrıca “Sprite” sınıfını “soyut” yapmayı da düşünmelisiniz. –