(JFX) Проблемы при загрузке изображений с использованием метода stati c и унаследованных классов - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь загрузить 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...