Я пытаюсь загрузить 2 изображения, используя метод c loadImage (String), который я создал. Этот метод хранится в моем классе Entity (abstract), а мои классы Projectile и Player наследуются от этой сущности.
Однако, когда я использую этот метод (2 раза с момента загрузки "Projectile.loadImage ( "image1"); "и" Player.loadImage ("image2"); ") сохраняется только второе изображение.
Я думаю, что это вызвано наследованием, так как написан метод loadImage () в классе Entity, так что это может быть изменение спрайта stati c от Entity, а не Player или Projectile, но я не знаю, как это исправить, не воссоздав метод loadImage () для всех подклассов и не наследуя подклассы свойство sprite, но имеющее свои собственные
Вот пример кода:
//Main class
package application;
import Entities.*;
import javafx.animation.AnimationTimer;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.input.KeyEvent;
import javafx.stage.Stage;
public class Main extends Application
{
final int WIDTH = 800;
final int HEIGHT = 800;
public int frameCount = 0;
Player p;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage stage) throws Exception {
Player.loadImage("/images/isaac.png");
Projectile.loadImage("/images/tear.png");
stage.setTitle("My first JFX / Java project");
Group root = new Group();
Scene scene = new Scene(root, WIDTH, HEIGHT);
p = new Player(WIDTH/2,HEIGHT/2,root);
stage.setScene(scene);
stage.setResizable(false);
stage.sizeToScene();
stage.show();
}
}
//Entity Class and load Image
package Entities;
import application.Vector2;
import javafx.scene.Group;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
public abstract class Entity {
protected double x;
protected double y;
private Group root;
protected Vector2 dir;
protected double speed;
private static Image sprite;
private ImageView iv;
private int size;
private double hp;
public Entity(float px, float py,Group r, Image s) {
root = r;
x = px;
y = py;
size = 100;
iv = new ImageView(s);
dir = new Vector2(0,0);
speed = 0.2;
hp = 3;
root.getChildren().add(iv);
iv.setX(x);
iv.setY(y);
iv.setFitWidth(100);
iv.setFitHeight(100);
}
public static void loadImage(String input) {
sprite = new Image(input);
}
//Player class constructor
package Entities;
import application.Vector2;
import javafx.scene.Group;
public class Player extends Entity{
private boolean north, west, south, east;
private boolean shootN, shootW, shootS, shootE;
private Vector2 pInput;
public Player(float px, float py,Group r) {
super(px,py,r,getSprite());
north = false;
west = false;
south = false;
east = false;
pInput = new Vector2(0,0);
setHp(10);
}
}
//Projectile Constructor
package Entities;
import java.util.ArrayList;
import application.Vector2;
import javafx.scene.Group;
public class Projectile extends Entity{
private double speed;
Entity parent;
int lifespan;
public Projectile(float px, float py,Group r,Entity p,Vector2 d){
super(px,py,r,getSprite());
speed = 5;
dir = new Vector2(d.x,d.y);
dir.x += p.dir.x/30;
dir.y += p.dir.y/30;
lifespan = 100;
parent = p;
}
}