当我旋转图像时,它会离开屏幕

时间:2017-04-24 03:38:27

标签: image rotation processing

我试图将图像旋转90度,但当我离开屏幕时(在窗口左侧)这里是我的代码:

这是指向我的图片的链接:http://imgur.com/gallery/pQ85Z

现在我只是试图让它旋转,当我按下' r'但在此之后我需要让它在碰到屏幕边缘时旋转。

PImage head;
int fizzyX = 400;
int fizzyY = 50;
int movementX=0;
int movementY=0;
float x;

void setup() {
  size(800,800);
  background(255);
  head = loadImage("Fizzy.PNG");
}

void collisionDetection() {
  if (fizzyX == (750)) {
    movementX=-1;
    key = 'a';
  }
}



void keyPressed() {
  if (key == 'a' || key == 'A') {
    movementX = -1;
    movementY = 0;
  }
  if (key == 'd' || key == 'D') {
    movementX = 1;
    movementY = 0;
  }
  if (key == 'w' || key == 'W') {
    movementX = 0;
    movementY = -1;
  }
  if (key == 's' || key == 'S') {
    movementX = 0;
    movementY = 1;
  }
  if (key == 'r') {
    x = PI/2;
  }
}

void draw() {
  rotate(x);
  background(255);
  imageMode(CENTER);
  image(head,fizzyX,fizzyY);
  fizzyX+=movementX;
  fizzyY+=movementY;
  keyPressed();
  collisionDetection();
  translate(width/2,height/2);

}

2 个答案:

答案 0 :(得分:0)

rotate()函数围绕原点执行旋转,默认情况下为0,0。这会导致图像围绕窗口的左上角旋转,从而导致图像离开屏幕。

如果要围绕图像中心旋转图像,则首先必须将原点移动到图像的中心。您可以使用translate()功能执行此操作,但必须先 进行轮换。

把它放在一起,它看起来像这样:

void draw() {

  background(255);

  imageMode(CENTER);
  translate(fizzyX, fizzyY);
  rotate(x);

  image(head,0,0);

  fizzyX+=movementX;
  fizzyY+=movementY;
  collisionDetection();

}

另请注意,您不应手动调用keyPressed()功能。处理将为您调用。

答案 1 :(得分:0)

更详细,我的建议:

- 每次按r x必须在HALF_PI中增加(HALF_PI是处理中定义的常量)

- 每次进行转换时都应该使用pushMatrix()和popMatrix(),以便只转换当时的内容。

- 将原点放在要放置图形的位置,然后旋转,然后将图形放在0,0中。这是您更正的代码,它就像一个魅力。

- 尽可能使用PVector,使代码更易于理解,使用变量X变得简洁,变量

-X是一个坏名称rotationAngle会更好一个

尝试一下,它的工作方式更加清晰。

PImage head;
PVector fizzy;
PVector movement;
float rotationAngle;

void setup(){
  size(800,800);
  fizzy=new PVector(400,50);
  movement=new PVector(0,0);
  rotationAngle=0;
  background(255);
  head = loadImage("Fizzy.png");
}

void collisionDetection() {
  if (fizzy.x == (750)) {
    movement.set(-1,0);
  }
}

void keyPressed() {
  if (key == 'a' || key == 'A') {
    movement.set(-1,0);
  }
  if (key == 'd' || key == 'D') {
    movement.set (1,0);
  }
  if (key == 'w' || key == 'W') {
    movement.set (0,-1);
  }
  if (key == 's' || key == 'S') {
    movement.set (0,1);
  }
  if (key == 'r') {  
     rotationAngle+=HALF_PI;  
  }
}

void draw() {
  background(255);
  pushMatrix();
  translate(fizzy.x,fizzy.y);
  rotate(rotationAngle);
  imageMode(CENTER);
  image(head,0,0);
  popMatrix();

  fizzy.add(movement);
  collisionDetection();
}