使用教程中的 Javafx 类对游戏进行编程并遇到未定义的类错误

Posted

技术标签:

【中文标题】使用教程中的 Javafx 类对游戏进行编程并遇到未定义的类错误【英文标题】:Programming a game using the Javafx class from a tutorial and have come across an undefined class error 【发布时间】:2019-02-14 00:40:40 【问题描述】:
else if(left || right) 
    if(currentAction != WALKING) 
        currentAction = WALKING;
        animation.setFrames(sprites.get(WALKING));
        animation.setDelay(40);
        width = 30;

这是我遇到问题的代码。即animation.setFramessetDelay setFrames 使用BufferedImage 数组,setDelaylong 变量。出现的两个错误是

The method setFrames(BufferedImage[]) is undefined for the type Animation

The method setDelay(Duration) in the type Animation is not applicable for the arguments (int)
public void setFrames(BufferedImage[] frames) 
        this.frames = frames;
        currentFrame = 0;
        startTime = System.nanoTime();
        playedOnce = false;

这是setFrames 的代码,delay 的 setter 代码只是

public void setDelay(long d) 
    delay = d;

欢迎任何帮助。 教程中没有这些错误 编辑:我在构造函数中创建了一个新的Animation 类,但它没有解决它。添加动画类

  package Entity;

    import java.awt.image.BufferedImage;

    public class Animation 
        private BufferedImage[] frames;
        private int currentFrame;

        private long startTime;
        private long delay;

        private boolean playedOnce; played; e.g. an attack so it does not


        public void Animation() 
            playedOnce = false;
        

        public void setFrames(BufferedImage[] frames) 
            this.frames = frames;
            currentFrame = 0;
            startTime = System.nanoTime();
            playedOnce = false;
        

        public void setDelay(long d) 
            delay = d;
        

        public void setFrame(int i) 
            currentFrame = i;
        

        public void update() 
            if (delay == -1)
                return;
            long elapsed = (System.nanoTime() - startTime) / 1000000;
            if (elapsed > delay) 
                currentFrame++;
                playedOnce = true;

            

        

        public int getFrame() 
            return currentFrame;
        

        public BufferedImage getImage() 
            return frames[currentFrame];
        

        public boolean hasPlayedOnce() 
            return playedOnce;
        
    

【问题讨论】:

确保您没有从 javafx.animation 导入 Animation 类。如果您在导入中找到此行,请删除它:import javafx.animation.Animation。如果这不能解决问题,请发布您的整个动画课程。 显示minimal reproducible example 在 JavaFX 项目中使用 BufferedImage 似乎有点奇怪。通常BufferedImage 用于 Swing/AWT 项目; JavaFX 项目通常使用javafx.scene.image.Image。此外,类层次结构在这里似乎很重要。看起来您正在使用 javafx.animation.Animation 而不扩展它。这样你的自定义方法不可用,那么你把它们放在哪里了? 发生错误的类扩展了一个超级抽象类。导致问题的方法在教程中没有在此类中扩展 Animation 类的情况下没有造成任何问题。 已修复感谢支持,我只需要新建一个动画 【参考方案1】:

感谢 Bandreid 的回答。 它需要添加对象并创建一个新对象。

【讨论】:

以上是关于使用教程中的 Javafx 类对游戏进行编程并遇到未定义的类错误的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX - 游戏循环画布高 CPU 使用率

javafx编程问题

什么是JavaFX

如何对JavaFX lambda表达式进行反向工程并获取EventHandler和ActionListener的类定义

JavaFX中的2D相机?

如何在 JavaFX 中的图像之间切换