低悬的图形编程水果?

问题描述 投票:3回答:5

我目前正在研究Java2D中基于磁贴的游戏,我正在考虑添加一些便宜的眼睛糖果。

例如,为爆炸和/或烟雾实施一个简单的粒子系统(可能像this)。

您是否有任何关于相对容易编程的效果的建议,这些效果不需要大量(或根本)绘制新艺术?

这些效果的教程和代码示例也是最受欢迎的!

我-ido。

PS - 如果绝对必要,我可以切换到像LWJGL / JOGL甚至是Slick这样的东西 - 但我宁愿继续使用Java2D。

java graphics java-2d
5个回答
6
投票

实现模糊和其他图像过滤效果非常简单。

例如,要在BufferedImage上执行模糊,可以使用带有ConvolveOp中指定的卷积矩阵的Kernel

BufferedImageOp op = new ConvolveOp(new Kernel(3, 3,
    new float[] { 
        1/9f, 1/9f, 1/9f,
        1/9f, 1/9f, 1/9f,
        1/9f, 1/9f, 1/9f
    }
));

BufferedImage resultImg = op.filter(originalImg, resultImage);

不太确定何时需要模糊效果,但它可能会在某个时候派上用场。但我认为它易于实施,这是一个悬而未决的成果。

以下是有关convolution matrices的一些信息。它可用于实现锐化,浮雕,边缘增强等效果。


5
投票

BufferedImage上执行像素化效果是一个低悬的水果操作。

这可以分两步执行:

  1. 确定像素化的一个块的颜色。
  2. 填写图像上的像素化​​块。

第1步:确定颜色:

public static Color determineColor(BufferedImage img, int x, int y, int w, int h) {
    int cx = x + (int)(w / 2);
    int cy = y + (int)(h / 2);
    return new Color(img.getRGB(cx, cy), true);
}

determineColor方法中,确定来自BufferedImage中心的像素颜色,并将其传递回调用者。

第2步:使用确定的颜色填充像素化块:

BufferedImage sourceImg = ...;  // Source Image.
BufferedImage destimg = ...;    // Destination Image.
Graphics g = destImg.createGraphics();

int blockSize = 8;
for (int i = 0; i < sourceImg.getWidth(); i += blockSize) {
    for (int j = 0; j < sourceImg.getHeight(); j += blockSize) {
        Color c = determineColor(sourceImg, i, j, blockSize, blockSize);
        g.setColor(c);
        g.fillRect(i, j, blockSize, blockSize);
    }
}
g.dispose();

虽然有相当多的代码,但这种影响在智力上是一个悬而未决的成果 - 没有太多复杂的事情发生。它基本上是找到一个块的中心颜色,并用这种颜色填充一个盒子。这是一个相当天真的实现,因此可能有更好的方法来实现它。

以下是执行上述像素化效果之前和之后的比较:

Non-pixelated image Pixelated image


1
投票

Filthy Rich Clients详细描述了许多非常好的Java2D / Swing效果。它还为这些效果提供了极好的理论背景。我不确定它有多少低调的果实,但它是一个很好的浏览资源。

一种可能性是使用alpha合成做一些事情。也许将alpha复合与Timing Framework结合起来。根据游戏规则的不同,游戏玩法可能有选择性地和时间依赖地使对象半透明。


0
投票

透明效果(例如烟雾)可以在没有太多努力的情况下产生很大的差异。不知道是否可以在Java2d中完成。


0
投票

任何看起来都很逼真的东西,从其他东西中弹出的东西,滚落等等都会很酷,如果你的游戏是2D滚动而不是自上而下的2D,你可以使用现成的物理引擎像Box2D一样,只需很少的努力就可以做一些很酷的事情。这是你可以使用的a Java port of Box2D

© www.soinside.com 2019 - 2024. All rights reserved.