2017-04-24 47 views
0

我尝试旋转图像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

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()功能。处理将为你打电话。

+0

感谢这正是我需要的答案,但我不明白为什么自己的形象(头,0,0),而不是像(头,fizzyX,fizzyX)不应前者把图像在屏幕的左上角,而不是在fizzyX和Y的值? –

+0

@TimothyBolton记住坐标是相对于**原点**。对translate()的调用将原点移动到fizzyX,fizzyY。那么如果我们在'100,100'处绘制一些东西,它实际上会处于'fizzyX + 100,fizzyY + 100',因为一切都是相对于原点的。这就是为什么你在'0,0'处绘制一些东西来放在'fizzyX,fizzyY'上。那有意义吗? –

0

更详细的,我建议:

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

你做一个转变,你应该使用pushMatrix - 每次( )和popMatrix(),以便只转换之间的内容。

- 将要放置图形的原点放入,然后旋转,然后将图形放入0,0。这是你更正的代码,它的作用就像一个魅力。

- 使用PVector如果可能,使代码更易于理解,与variableX更简洁,variableY

-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(); 
} 
相关问题