2013-03-24 94 views
0
void runGame(){ 
    readimagefile("PIX\\Landscape.jpg", 0, 0, 800, 800); 
    while(1 == 1){ 
     moveCharacter(); 
     //moveMonster(); 
    } 
} 
void moveCharacter(){ 

    int move = 0; 
    int size = imagesize(0, 0, 800, 800); 
    void *background = malloc(size); 
    getimage(0, 0, 800, 800, background); 

    readimagefile("PIX\\Character\\down_still.gif",x9,y9,x9+50,y9+50); 
    thunderClaw(); 
    //specialAttack(); 
    //thunderball(); 
    if(kbhit()){ 

    if(getch()== 'd'){ 
     move = 1; 
     } 
    if(getch()== 'a'){ 
     move = 3; 
     } 
    if(getch()== 'w'){ 
     move = 2; 
     } 
    if(getch()== 's'){ 
     move = 4; 
     } 
    } 

    switch (move){ 

    case 1://left 

     readimagefile("PIX\\Character\\left_r.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     x9 = x9 + 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\left_still.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     x9 = x9 + 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\left_l.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     x9 = x9 + 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\left_still.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     x9 = x9 + 5; 
     putimage(0, 0, background, COPY_PUT); 
     break; 

    case 2://up 

     readimagefile("PIX\\Character\\up_r.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     y9 = y9 - 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\up_still.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     y9 = y9 - 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\up_l.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     y9 = y9 - 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\up_still.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     y9 = y9 - 5; 
     putimage(0, 0, background, COPY_PUT); 
     break; 

    case 3://right 

     readimagefile("PIX\\Character\\right_r.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     x9 = x9 - 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\right_still.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     x9 = x9 - 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\right_l.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     x9 = x9 - 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\right_still.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     x9 = x9 - 5; 
     putimage(0, 0, background, COPY_PUT); 
     break; 


    case 4://down 

     readimagefile("PIX\\Character\\down_l.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     y9 = y9 + 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\down_still.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     y9 = y9 + 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\down_r.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     y9 = y9 + 5; 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Character\\down_still.gif",x9,y9,x9+50,y9+50);Sleep(15); 
     y9 = y9 + 5; 
     putimage(0, 0, background, COPY_PUT); 
     break; 

    default: 
     readimagefile("PIX\\Character\\down_still.gif", x9, y9, x9+50, y9+50); 
     putimage(0, 0, background, COPY_PUT); 
    } 
    }//end function 

void thunderClaw(){ 
    int mx = mousex(); 
    int my = mousey(); 

    int size = imagesize(0, 0, 800, 800); 
    void *background = malloc(size); 
    getimage(0, 0, 800, 800, background); 

    getmouseclick(WM_LBUTTONDOWN, mx, my); 
    if(WM_LBUTTONDOWN){ 
     printf("Left mouse button was clicked!\n"); 
     #ifdef SOUNDfx 
     PlaySound("SOUNDS\\Electricity_Shock_Sound_Effect.wav", NULL, SND_ASYNC); 
     #endif 
     readimagefile("PIX\\Thunderclaw\\thunderclaw00.gif", mx-25, my-25, mx+25, my+25);Sleep(80); 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Thunderclaw\\thunderclaw01.gif", mx-25, my-25, mx+25, my+25);Sleep(80); 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Thunderclaw\\thunderclaw0.gif", mx-25, my-25, mx+25, my+25);Sleep(80); 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Thunderclaw\\thunderclaw.gif", mx-25, my-25, mx+25, my+25);Sleep(80); 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Thunderclaw\\thunderclaw2.gif", mx-25, my-25, mx+25, my+25);Sleep(80); 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Thunderclaw\\thunderclaw3.gif", mx-25, my-25, mx+25, my+25);Sleep(80); 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Thunderclaw\\thunderclaw4.gif", mx-25, my-25, mx+25, my+25);Sleep(80); 
     putimage(0, 0, background, COPY_PUT); 
     readimagefile("PIX\\Thunderclaw\\thunderclaw5.gif", mx-25, my-25, mx+25, my+25);Sleep(80); 
     putimage(0, 0, background, COPY_PUT); 
    } 
} 

所以這是我現在的代碼。我的問題是,它不斷思考鼠標左鍵不斷點擊。因此,它一直在將動畫放在左上角並放慢角色移動。我已經嘗試了一些令人滿意的東西來阻止這一點,但一直沒有弄清楚。谷歌也沒有幫助。我只是不明白它是如何認爲我經常點擊鼠標左鍵。我相信這是因爲if(WM_LBUTTONDOWN)語句。但即使如此,我也嘗試過改變它,增加不同的規格,移動它,擺脫它,沒有什麼解決我需要它。它只是不斷地認爲左按鈕正在被點擊(即使當我擺脫if()聲明它做到了這一點!)。我的2D遊戲動畫問題

任何人都可以幫我解決這個問題嗎?

謝謝!

P.S.我在Visual Studio 2012和graphics.h庫中。

void getmouseclick(int kind, int& x, int& y) 
{ 
    WindowData *pWndData = BGI__GetWindowDataPtr(); 
    POINTS where; // POINT (short) to tell where mouse event happened. 

    // Check if mouse event is in range 
    if (!MouseKindInRange(kind)) 
     return; 

    // Set position variables to mouse location, or to NO_CLICK if no event occured 
    if (MouseKindInRange(kind) && pWndData->clicks[kind - WM_MOUSEFIRST].size()) 
    { 
     where = pWndData->clicks[kind - WM_MOUSEFIRST].front(); 
     pWndData->clicks[kind - WM_MOUSEFIRST].pop(); 
     x = where.x; 
     y = where.y; 
    } 
    else 
    { 
     x = y = NO_CLICK; 
    } 
} 

這就是你在說的代碼getmouseclick()?這不是我寫的哈哈,而是我正在使用的東西。

+0

任何人在那裏有意見? – 2013-03-24 19:16:54

回答

1

WM_LBUTTONDOWN是一個窗口常數,它被定義爲

#define WM_LBUTTONDOWN     0x0201 

所以

if(WM_LBUTTONDOWN){ 

總是會評估爲true。

你想要的是大概就像

if (getmouseclick(WM_LBUTTONDOWN, mx, my) == WM_LBUTTONWDOWN) { 
+0

不幸的是getmouseclick()不能放在if()語句中。或者至少在我嘗試時總是用紅色下劃線。所以我明白我的問題始終是真的,所以它總是這樣做......但我只是沒有得到如何設置條件,只有當用戶按下鼠標應該工作。我已經耗盡了我對鼠標功能的瞭解,試圖讓這些垃圾工作起來!哈哈。 – 2013-03-24 20:58:31

+0

既然你沒有發佈getmouseclick的代碼,我不能告訴你什麼是真的錯... – MLeblanc 2013-03-24 21:07:57

+0

好吧,我用代碼getmouseclick()更新了第一篇文章。也許我需要一個不同的鼠標命令? Idk ...我現在處於虧損狀態。 – 2013-03-24 21:11:23

0
DWORD result = 0; 
result = getmouseclick(WM_LBUTTONDOWN, mx, my); 
    if(result == WM_LBUTTONDOWN){ // then left mouse button was clicked and do some actions 
}