处理,镜像或翻转图像而不影响其他人

时间:2015-05-08 18:05:37

标签: javascript audio sprite processing

我正在开发一个使用Javascript处理的迷你平台游戏,比如马里奥。

我正在用箭头或WASD移动我的角色,我想知道在镜像角色/图像时是否有scale(-1,1);的替代品。 (它默认情况下向右看,或者按D键时,按A键向左翻转。)

如果这是最好或最简单的方式,我也想知道如何使比例方法不影响所有其他图像,因为我想放置一些平台但是有规模当角色移动时,他们一直在翻转......

我也正在使用Processing和Javascript收听与精灵/声音使用相关的任何信息。我尝试了一些库,但只有当我切换到Java模式时才能工作。

提前致谢, MARAL。

由于之前的帖子,我使用了比例镜像。 Processing mirror image over x axis?

“dreta”为Right,“esquerre”为Left,两者均由WASD或Keys控制,将每个布尔值更改为true,释放为false。 我没有发布所有代码,但这是我想要解决的基本动作。

   void draw() {
       pushMatrix();
       if (iniciar == true) {
       inici();
    }
    if (dreta == true && esquerre != true) {
      movDret(backgroundimg[2]);
    }
    if (esquerre == true && dreta != true) {
      movEsquerre(backgroundimg[2]);
    }
  }

   void platformndBackground(PImage b){
      background(b);
      popMatrix();
      image(imgGrass[0], 50, 50);
      if (esquerre == true) {
        scale(-1,1);
      }
   }

   void inici() {
      movDret(backgroundimg[2]);
      iniciar = false;
   }

   void movDret(PImage b) {
      //Colisió extrem Esquerre.
     if (posicio > 1024-imgJugador[5].width) {
       posicio = posicio - imgJugador[tipusMoviment].width/2;
       movEsquerre(backgroundimg[2]);
     } else {
       bothMoviments(b);
       image(imgJugador[tipusMoviment], posicio, posicioSalt);
       posicio = posicio + 3;
     }
   }

    void movEsquerre(PImage b) {
      //Colisió extrem Dret.
      if (posicio < 0) {
        posicio = posicio + imgJugador[tipusMoviment].width/2;
        popMatrix();
        movDret(backgroundimg[2]);
      } else {
        bothMoviments(b);
        image(imgJugador[tipusMoviment], ((-imgJugador[tipusMoviment].width)-posicio), posicioSalt);
        posicio = posicio - 3;
      }
    }

    void bothMoviments(PImage b) {
      if (esquerre == true) {
        scale(-1, 1);
      }else{
        popMatrix();
      }
        if (tipusMoviment < imgJugador.length-1) {
          tipusMoviment++;
        } else {
          tipusMoviment = 5;
        }
        platformndBackground(b);
    }

1 个答案:

答案 0 :(得分:1)

如果您不想镜像您的精灵,您可以使用两组精灵:一组用于向右,一组用于向左。

但是如果您使用scale()函数来镜像精灵,则需要使用pushMatrix()popMatrix(),这样缩放不会影响其他所有精灵。像这样:

public void draw(){

   background(0);

   pushMatrix(); //save current "default" matrix
      scale(-1,1); //scale the matrix
      image(img,-img.width,img.height); //draw the image using the scaled matrix
   popMatrix(); //go back to the saved "default" matrix

   //draw non-mirrored sprites
   image(img2,img2.width,img2.height);
}

更多信息可在参考here中找到。