首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >低挂图形编程成果?

低挂图形编程成果?
EN

Stack Overflow用户
提问于 2009-06-10 14:44:05
回答 5查看 1.5K关注 0票数 3

我目前正在用Java2D开发一个基于磁贴的游戏,我正在考虑添加一些便宜的花哨的东西。

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

你有什么建议,可以相对容易地编程效果,而不需要画很多(或根本不需要)新的艺术吗?

对于上述效果的教程和代码样本也将是最受欢迎的!

-Ido。

PS -如果绝对必要,我可以切换到LWJGL/JOGL,甚至Slick之类的东西-但我宁愿留在Java2D上。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-06-10 14:53:40

实现模糊和其他图像过滤效果相当容易执行。

例如,要对BufferedImage执行模糊,可以将ConvolveOpKernel中指定的卷积矩阵一起使用

代码语言:javascript
复制
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的信息。它可以用来实现锐化,浮雕,边缘增强等效果。

票数 6
EN

Stack Overflow用户

发布于 2009-06-10 16:02:50

BufferedImage上执行像素化效果是一种容易实现的操作。

这可以通过两个步骤来执行:

  1. 确定图像像素化块中pixelation.
  2. Fill的一个块的颜色。

步骤1:确定颜色:

代码语言:javascript
复制
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:用确定的颜色填充像素化块:

代码语言:javascript
复制
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();

虽然有相当多的代码,但这种效果在智力上是一个容易摘到的果实--没有太多复杂的事情正在发生。它基本上是找到一个块的中心颜色,并用该颜色填充一个框。这是一个相当幼稚的实现,因此可能有更好的方法来实现它。

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

票数 5
EN

Stack Overflow用户

发布于 2009-06-10 16:17:41

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

一种可能是使用alpha合成。也许将alpha composite与Timing Framework结合使用。根据你的游戏规则,它甚至可能是重要的游戏,有选择地和时间依赖地使对象半透明。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/976026

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档