0
我正在使用C++,Allegro5和代碼塊。我正在寫一個測試程序,然後寫一個非常基本的小行星敲除。唯一的規則是使用C++,Allegro,並且沒有精靈或位圖(這特別需要使用線條和形狀等基元)。C++ Allegro第一個顯示程序 - 轉換旋轉刻度
我正在繪製象限1中的形狀,在相對原點翻譯的象限2中重繪它,重繪三次,旋轉一定的度數,最後繪製它在象限4中重新縮放。
部件1 2和4工作正常。我的問題是旋轉功能。它沒有旋轉正確的數量,或者根本不旋轉。小於90時,它旋轉輸入角度的一半。之後,它不旋轉或不繪製。
我將在下面發佈輪換方法代碼。我知道它很臃腫,需要清理(我剛剛修復了一些修復1,2和4的邏輯),但我真的需要旋轉幫助。 我想我使用ATAN2正確,我已經變成
void rotation (float degrees)
{
ALLEGRO_COLOR color_black = al_map_rgb(0,0,0);
ALLEGRO_COLOR color_blue = al_map_rgb(150,150,150);
ALLEGRO_COLOR color_orange = al_map_rgb(255,135,135);
ALLEGRO_COLOR color_red = al_map_rgb(255,0,0);
al_clear_to_color(al_map_rgb(255,255,255)); //clear screen to white
//draw black grid
al_draw_line(400,0, 400,600, color_black, 4.0);
al_draw_line(0,300, 800,300, color_black, 4.0);
al_draw_line(200,0, 200,600, color_black, 1.0);
al_draw_line(600,0, 600,600, color_black, 1.0);
al_draw_line(0,150, 800,150, color_black, 1.0);
al_draw_line(0,450, 800,450, color_black, 1.0);
float rx[13], ry[13];
float phi, theta, radius; //phi original angle theta added angle of rotation
float ycenter = 0, xcenter = 0; //later will be used with varying object position
theta = degrees * PI/180.0;
for (int i = 0; i < 13; i++)
{
phi = atan2(yarray[i], xarray[i]);
radius = sqrt(pow((xarray[i]-xcenter),2.0) + pow((yarray[i]-ycenter),2.0));
rx[i] = xarray[i] + radius * cos(phi + theta);
ry[i] = yarray[i] + radius * sin(phi + theta);
}
float x = quad[2][0];
float y = quad[2][1];
al_draw_triangle(x+rx[0],y+ry[0], x+rx[1],y+ry[1], x+rx[2],y+ry[2], color_red, 10);
al_draw_filled_triangle(x+rx[3],y+ry[3], x+rx[4],y+ry[4], x+rx[5],y+ry[5], color_orange);
al_draw_filled_triangle(x+rx[6],y+ry[6], x+rx[7],y+ry[7], x+rx[8],y+ry[8], color_blue); //body
al_draw_filled_triangle(x+rx[9],y+ry[9], x+rx[10],y+ry[10], x+rx[11],y+ry[11],color_blue); //wing
al_draw_filled_ellipse(x+rx[12],y+ry[12], 4, 8, color_black); //cockpit
al_flip_display();
}