如何解决Java中的图像颜色渗色(使用处理)?

时间:2019-01-04 19:46:15

标签: java graphics 2d rendering processing

在我的Java(使用Processing)Terraria(基于瓷砖的2D游戏)克隆中,当相机移动时,我在表面块和天空之间遇到了相当重的色斑(我认为这就是您所说的)很快。

我已经尝试将fps限制为60和其他值,但这完全没有帮助。我还尝试删除所有代码,除了绘制块和天空,仅以恒定的速率向下移动相机,但问题仍然存在。我也尝试过只在屏幕上绘制一些距离相机不到10个块的块,但这并没有帮助。我尝试将背景色从天蓝色变为淡红色,并观察到出血的颜色发生了变化,但是强度保持不变。我还试图将显示器的刷新率限制为60HZ,以防万一显示器出现问题(但正如您所看到的,我录制了问题的视频)。

编辑:当我以四分之一的速度播放视频时,几乎看不到它,因此可能是我的显示器产生的效果。即使那样,我也想知道如何处理这个问题,因为当全速运行游戏时,它非常引人注目。我玩其他游戏时没有注意到这种效果。

/*
The following contains a bit of pseudo code as to not get cluttered up with
Camera movement and choosing which blocks to be rendered, but otherwise
it is the same as my implementation
*/

static PImage dirtImg;
//Right above surface
float camY = SURFACE_HEIGHT + TERRAIN_HEIGHT + 10;
float t0 = 0.0, t1 = 0.0;
float dt = 1.0 / 60.0;

//I am running this once during the setup.
void loadImg() {
    dirtImg = loadImage("data/images/textures/0.png", "png");
}

void drawBlocks() {
    //for each block on screen with pos (x,y)
    image(dirtImg,x,y);
}

void draw() {
    adjustTiming();
    background(127,218,255);
    drawBlocks();
    camY -= 10 * dt;
}

void adjustTiming() {
    if (frameCount == 1) {
        t0 = System.nanoTime();
    }
    else {
        t0 = t1;
        t1 = System.nanoTime();
        dt = (t1 - t0) / 1E9;
    }
}

对不起,我的代码格式很抱歉,这是我关于SO的第一篇文章...

我希望这些块看起来像它们的图像,而它们上方的天空看起来像我为其设置的颜色,但是随着相机的向下移动,会有很多颜色渗出。我没想到会这样,因为在其他游戏中我可以快速移动相机,而不会注意到这种效果。我有一段视频here,该视频是我遇到的流血现象。

编辑:由于YouTube将视频转换为30fps,请尝试以2倍的速度观看原始效果。另外,here是一个链接,以144fps的速度下载视频,以查看完整的原始效果。 This是git-hub信息库。我正在“基于时间的”分支中工作。

0 个答案:

没有答案