0
    public void draw(Graphics2D g) {
        // draw background
        g.drawImage(bgImage, 0, 0, null);
        g.drawImage(bgImage, 700, 0, null);
        g.drawImage(bgImage, 0, 500, null);
        g.drawImage(bgImage, 700, 500, null);

        AffineTransform transform = new AffineTransform();
        for (int i = 0; i < NUM_SPRITES; i++) {
            Sprite sprite = sprites[i];

            // translate the sprite
            transform.setToTranslation(sprite.getX(),
                sprite.getY());

            // if the sprite is moving left, flip the image
            if (sprite.getVelocityX() < 0) {
                transform.scale(-1, 1);
                transform.translate(-sprite.getWidth(), 0);
            }

            // draw it
            g.drawImage(sprite.getImage(), transform, null);
        }
    }
}

我正在查看此类中的绘制方法。该方法通过动画循环调用,它在屏幕上绘制一组动画精灵,根据计时器将动画中的正确帧传递给该方法。精灵也以随机生成的速度在屏幕上移动,从帧的边缘反弹。根据它们是向左还是向右移动,draw 方法会转换图像,使精灵朝向正确的方向。所有这些转换信息都包含在 drawImage 方法的转换中,我习惯于将其视为 g.drawImage(Image, x, y, null); 虽然显然你不能在这里这样做,因为你会失去图像翻转功能。有没有办法做到这一点?有没有办法转换图像比例但通过坐标设置其位置?

我问是因为转换是一种处理器密集度更高的活动,如果需要同时激活大量精灵,它可能真的会减慢一切。奖金问题:考虑到现代系统的力量,这是一个合理的担忧还是我应该不太担心。

4

0 回答 0