PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/09/30 21:05:24
Name Haru
Subject API 게임 소스를 짰는데 이상하게 점프키가 안먹네요. 뭐가 문제인지 좀 찾아주세요.
#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPSTR lpszClass="Heart";

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
                  ,LPSTR lpszCmdParam,int nCmdShow)
{
        HWND hWnd;
        MSG Message;
        WNDCLASS WndClass;
        g_hInst=hInstance;
        
        WndClass.cbClsExtra=0;
        WndClass.cbWndExtra=0;
        WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
        WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
        WndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);
        WndClass.hInstance=hInstance;
        WndClass.lpfnWndProc=(WNDPROC)WndProc;
        WndClass.lpszClassName=lpszClass;
        WndClass.lpszMenuName=NULL;
        WndClass.style=CS_HREDRAW | CS_VREDRAW;
        RegisterClass(&WndClass);

        hWnd=CreateWindow(lpszClass,lpszClass,WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
                  112,84,800,600,
                  NULL,(HMENU)NULL,hInstance,NULL);
        ShowWindow(hWnd,nCmdShow);
        
        while(GetMessage(&Message,0,0,0)) {
                TranslateMessage(&Message);
                DispatchMessage(&Message);
        }
        return Message.wParam;
}

HBITMAP HBIBI;
BOOL JUMP;
int Gravity;

int move(int x)
{
        x = x / 3;
        return x;
}

void DrawBitmap(HDC hdc, int x, int y, HBITMAP hBit)
{
        HDC  MemDC;
        HBITMAP OldBitmap;
        int bx,by;
        BITMAP bit;

        MemDC=CreateCompatibleDC(hdc);
        OldBitmap=(HBITMAP)SelectObject(MemDC, hBit);

        GetObject(hBit,sizeof(BITMAP),&bit);
        bx=bit.bmWidth;
        by=bit.bmHeight;

        BitBlt(hdc,x,y,bx,by,MemDC,0,0,SRCCOPY);

        SelectObject(MemDC,OldBitmap);
        DeleteDC(MemDC);
}

void DrawMan(HWND hWnd, HDC hdc, int x, int y, int k, HBITMAP hBit)
{
        int bx;
        int by;
        HDC MemDC;
        HBITMAP OldBitmap;
        BITMAP bit;

        MemDC=CreateCompatibleDC(hdc);
        OldBitmap=(HBITMAP)SelectObject(MemDC, hBit);

        GetObject(hBit,sizeof(BITMAP),&bit);
        bx=bit.bmWidth;
        by=bit.bmHeight;

        bx = bx/3;

        TransparentBlt(hdc,x,y,bx,by,MemDC,0+k,0, bx, by, RGB(255,0,0));
                
        SelectObject(MemDC,OldBitmap);
        DeleteDC(MemDC);
}
void OnKeyDown(WPARAM wParam, int yStart)
{
        if(GetAsyncKeyState(VK_UP))
        {
        if(JUMP==FALSE)
            {
                JUMP=TRUE;
                Gravity=300;
                        }
                else if(JUMP==TRUE)
        {
            yStart-=(Gravity/20);
            Gravity-=20;
            if(Gravity<-300)
                {
                    JUMP=FALSE;
                                }
                }
        }
}

void OnTimer(HWND hWnd, int xStart, int yStart, int ImageCH, HBITMAP MyMan, WPARAM wParam)
{
        HDC hdc, hMemDC;
        HBITMAP OldBit;

        hdc=GetDC(hWnd);
        if(HBIBI==NULL){
                HBIBI=CreateCompatibleBitmap(hdc,30,60);
        }
        hMemDC=CreateCompatibleDC(hdc);
        OldBit=(HBITMAP)SelectObject(hMemDC,HBIBI);
        
        OnKeyDown(wParam, yStart);

                DrawMan(hWnd, hdc, xStart, yStart, ImageCH, MyMan);

        SelectObject(hMemDC,OldBit);
        DeleteDC(hMemDC);
        ReleaseDC(hWnd,hdc);
        InvalidateRect(hWnd,NULL,FALSE);
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
        HDC hdc;
        PAINTSTRUCT ps;
        static HBITMAP MyBit, MyMan;
        static int xStart=20;
        static int yStart=480;
        static int ImageCH=0;

        RECT cr;
        GetClientRect(hWnd, &cr);
        

        switch(iMessage) {
                case WM_CREATE:
                        MyBit=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP1));
                        MyMan=LoadBitmap(g_hInst,MAKEINTRESOURCE(IDB_BITMAP2));
                        SetTimer(hWnd,1,25,NULL);
                        return 0;
                case WM_KEYDOWN:
                        switch (wParam){          
                case VK_LEFT:
                        if(xStart >= cr.left){
                        xStart = xStart - 10;
                        }
                        ImageCH = ImageCH + 50;
                        if(ImageCH>100)
                        {
                                ImageCH = 0;
                        }
                        break;
        case VK_RIGHT:
                        if(xStart <= cr.right-50){
                        xStart = xStart + 10;
                        }
                        ImageCH = ImageCH + 50;
                        if(ImageCH>100)
                        {
                                ImageCH = 0;
                        }
                        break;
                        } return 0;
                case WM_TIMER:
                        OnTimer(hWnd, xStart, yStart, ImageCH, MyMan, wParam);
                        return 0;
                case WM_PAINT:
                        hdc=BeginPaint(hWnd, &ps);
                        DrawBitmap(hdc,0,0,MyBit);
                        DrawMan(hWnd, hdc, xStart, yStart, ImageCH, MyMan);
            EndPaint(hWnd, &ps);
                        return 0;  
                case WM_DESTROY:
                        DeleteObject(MyBit);
                        DeleteObject(MyMan);
                        KillTimer(hWnd,1);
                        PostQuitMessage(0);
                return 0;
        }
        return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

*** OnKeyDown을 OnTimer에 넣어놓구 VK_UP를 입력받으면 좌표를 변하게 해놓았습니다.
OnTimer가 타이머 함수라서 빠르게 계속 도는거 맞죠?
그런데 왜 점프 애니메이션이 구현이 안되나요? 좀 찾아주세요. 벌써 몇날몇일째 헤메고 있네요. ㅠㅠ

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
WizardMo진종
08/09/30 21:10
수정 아이콘
제 손 밖의 영역이긴한데.. 혹시 kpu 겜공 학생이신가요?
08/09/30 21:12
수정 아이콘
아뇨;; 그냥 지잡대 겜공학생인데요. 실력자분들이 보시면 아무것도 아닐 것 같은데;; 좀 개념이 헷갈려서 그런가 어렵네요.
slowtime
08/09/30 21:31
수정 아이콘
잘은 모르지만 OnKeyDown()이 왜 OnTimer() 안에 있어야 하는지 궁금합니다. 키가 눌려진 상태에서도 WM_TIMER 메시지가 발생할까요?
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
42861 박지성에대해서 [10] 날으는씨즈2339 08/10/01 2339
42860 정말 궁금해서 그러는데요 [8] worcs1871 08/10/01 1871
42859 광화문이나 종로쪽 맛집 좀 추천해주세요. [4] KanRyu3191 08/10/01 3191
42858 원카드를 배우고 싶은데... [4] 축구사랑2074 08/09/30 2074
42857 PvsZ 한타이밍 늦은 뮤탈 어떻게 대비해야되나요? [7] Jess:D1834 08/09/30 1834
42856 수업지도안 관련해서 질문 드립니다. [6] 눈팅만7년째1774 08/09/30 1774
42855 물리에 관한 질문입니다 [5] 적귀2123 08/09/30 2123
42854 스쿼시를 해보려 하는데요~ [3] Sigul2095 08/09/30 2095
42853 노래좀 찾아주십시오... [1] sherry1901 08/09/30 1901
42852 야구팬들만. 다음 두 선수 선수 중 한명을 선택하라면 누구를? [47] skyk1968 08/09/30 1968
42850 만성비염이신분들중 군대 갔다오신분들 질문있습니다. [4] KINKIN4047 08/09/30 4047
42849 아래 질문 보고 갑자기 질문이 생각 났네요.. 미드 관련 [14] 창천1851 08/09/30 1851
42848 요즘 밤에 하는 드라마 중에 재밌는거 뭐 있나요?? [7] top[of]zerg=홍Yello1857 08/09/30 1857
42847 수열문제하나만 질문드립니다. [3] Kaga2058 08/09/30 2058
42845 API 게임 소스를 짰는데 이상하게 점프키가 안먹네요. 뭐가 문제인지 좀 찾아주세요. [3] Haru4167 08/09/30 4167
42843 C언어 질문입니다. [5] 오만과나태2205 08/09/30 2205
42842 시를 쓸 수 있는 인터넷 공간?? [1] 리콜한방1611 08/09/30 1611
42841 문득 갑자기 생각나서그런데.. [6] yO、1729 08/09/30 1729
42838 재일한국인의 참정권에 대한 질문입니다. [1] 호로토스2155 08/09/30 2155
42837 혀짧은 소리 고치는 방법? [4] funnyday4151 08/09/30 4151
42836 강아지와 고양이 같이 키워도될까요 [7] 아레스2532 08/09/30 2532
42835 각종 환경 관련 협약들 [1] 8142078 08/09/30 2078
42834 중국어논문을 한국어로 번역해주는 사이트좀 추천부탁드립니다. [1] 베넷아뒤짱2316 08/09/30 2316
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로