【发布时间】:2016-09-29 21:14:52
【问题描述】:
我想制作一个在 Java 中为 JPanel 带来噪音的应用程序。我想出了一个非常随机的噪声,但我想画一个 Perlin 或 Simplex Noise。
这是代码:
import java.awt.*;
import java.util.*;
import javax.swing.*;
public class Paint extends JPanel {
private static boolean running = false;
private static Paint paint = new Paint();
private static Random random = new Random();
public static void main(String args[]) {
running = true;
JFrame f = new JFrame();
f.setSize(800, 800);
f.setResizable(running);
f.setUndecorated(running);
f.setLocationRelativeTo(null);
f.add(paint);
f.setVisible(running);
while(running) {
paint.repaint();
}
}
public void paint(Graphics g) {
noise(g);
}
private void noise(Graphics g) {
for(int i = 0; i < 800; i=i+10) {
for(int j = 0; j < 800; j=j+10) {
g.setColor(new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));
g.fillRect(j, i, 10, 10);
}
}
running = false;
}
}
那么我如何将 Perlin Noise 算法植入此代码,而不必安装外部库。
编辑:我并不懒惰,或者什么。我阅读了所有可能的噪声生成方式,我只是不完全了解如何将噪声方法迁移到类中。
【问题讨论】:
-
1) 查找/编写代码 2) 执行代码 3) 调试代码。我们只帮助#3。另外两个完全是你的责任。这不是代码编写服务。
-
将 Stefan Gustavsson 的单纯形噪声实现作为一个单独的类包含到您的项目中,并使用它。
-
您没有指定 Perlin 噪声前提条件(例如权重),也没有展示您的尝试并告诉我们您的尝试遇到了什么问题。这表明您可能来得太早了。
-
不要覆盖
paint()。你应该改写paintComponent(),它的第一个可执行语句应该是super.paintComponent(g); -
另外,
while (true)方法不应该用在 Swing 应用程序中,尤其是你写的那个,因为你会占用你的 CPU,使你的计算机有点迟钝。如果您想重复事件,请使用 Swing Timer。