处理 js - 关卡滚动

Processing js - Level Scroll

本文关键字:滚动 js 处理      更新时间:2023-09-26

>im试图用鼠标滚动地图,我有一些问题/疑问想问。

  1. 有没有更好的方法来设计更复杂的关卡? 我有点认为这种方式在性能方面不是很好。
  2. 滚动有一些问题; 如果你看到,当我们向右滚动时,最后所有第一行都会向左移动一点。 当我们向左滚动时也会发生。 第一个方块向右移动。 有没有办法防止这种情况?

这是我的代码:

/* @pjs preload="images/grass.png" */
var level = [];
var level_1 = [
    "egggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggge",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggg",
    "egggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggge",
];
var wid;
var hi;

var Ground = function(x, y, label) {
    this.x = x;
    this.y = y;
    this.label = label;
};
Ground.prototype.draw = function() {
    if(this.label == "g") {
        PImage name;
        name = loadImage("images/grass.png");
        image(name, this.x, this.y);
    }
};

void makeLevel() {
    for(var i = 0; i < level_1.length; i++) {
        for(var j = 0; j < level_1[i].length; j++) {
            switch(level_1[i][j]) {
                case "g" :
                    level.push(new Ground(j*15, i*15, "g"));
                    break;
                case "e" :
                    level.push(new Ground(j*15, i*15, "e"));
                    break;
            }
            wid = level_1[i].length-1;
        }
    }
}
makeLevel();
void draw() {
    background(0);
    for(var i=0; i < level.length; i++) {
        level[i].draw();
        if(mouseX <= width && mouseX >= width-15 && level[wid].x > width-15) {
            level[i].x -= 5;
        }
        if(mouseX <= 15 && mouseX >= 1 && level[0].x < 0) {
            level[i].x += 5;
        }
        if(mouseY >= height-15 && mouseY <= height && level[level.length-1].y > height-20) {
            level[i].y -= 5;
        }
        if(mouseY <= 15 && mouseY >= 1 && level[0].y < 0) {
            level[i].y += 5;
        }
    }
}

提前感谢=)

我有一个解决方案来解决您问题的第 2 部分:

在可汗学院的代码中,将"+0.5"添加到草的 x 位置。它应该看起来像这样:

level.push(new Ground(j*20 + 0.5, i*20, "g")); // grass

我真的无法解释为什么这有效,而且这可能不是最好的解决方案,因为它将草移动了 0.5px,但这是一个快速解决方案,可以避免一排草突然消失的问题。