我试图将图像旋转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);
}
答案 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();
}