物体的加速运动(只受重力影响)
2013-12-10 20:15
281 查看
#include <Windows.h>
#include <iostream>
const int X=200,Y=50; //程序窗口左上角相对于屏幕的坐标
const int WIDTH=640,HEIGHT=480; // //程序窗口的宽与高
DWORD tPre,tNow; //tPre记录上一次绘图的时间,tNow记录此次准备绘图的时间
int x=0,y=0,vx=3,vy=0,gy=1; //x、y表示物体的初始位置,vx、vy表示速度的变化量,gy表示重力加速度
HDC hdc,mdc,bufdc;
HBITMAP bg,dra;
RECT rect;
void MyPaint(HDC);
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
const std::string szTitle="加速运动";
WNDCLASS winclass={CS_HREDRAW|CS_VREDRAW,WndProc,0,0,hInstance,LoadIcon(NULL,IDI_APPLICATION),
LoadCursor(NULL,IDC_ARROW),(HBRUSH)GetStockObject(WHITE_BRUSH),NULL,szTitle.c_str()};
if(!RegisterClass(&winclass))
return false;
HWND hWnd=CreateWindow(szTitle.c_str(),szTitle.c_str(),WS_OVERLAPPEDWINDOW,X,Y,WIDTH,HEIGHT,
NULL,NULL,winclass.hInstance,NULL);
if(0==hWnd)
return 0;
ShowWindow(hWnd,SW_SHOWDEFAULT);
UpdateWindow(hWnd);
MSG msg;
ZeroMemory(&msg,sizeof(MSG));
while(msg.message!=WM_QUIT)
{
if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
tNow=GetTickCount();
while(tNow-tPre>=40)
MyPaint(hdc);
}
}
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam)
{
HBITMAP bmp;
switch(message)
{
case WM_CREATE:
{
hdc=GetDC(hWnd);
mdc=CreateCompatibleDC(hdc);
bufdc=CreateCompatibleDC(hdc);
bmp=CreateCompatibleBitmap(hdc,WIDTH,HEIGHT);
SelectObject(mdc,bmp);
//加载物体位图
bg=(HBITMAP)LoadImage(NULL,"bg.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
dra=(HBITMAP)LoadImage(NULL,"dra.bmp",IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
GetClientRect(hWnd,&rect); //取得内部窗口区域大小
}
break;
case WM_KEYDOWN:
{
if(wParam==VK_ESCAPE)
DestroyWindow(hWnd);
}
break;
case WM_DESTROY:
{
DeleteDC(bufdc);
DeleteDC(mdc);
DeleteObject(bg);
DeleteObject(dra);
ReleaseDC(hWnd,hdc);
PostQuitMessage(0);
}
break;
default:
return DefWindowProc(hWnd,message,wParam,lParam);
}
return 0;
}
void MyPaint(HDC hdc)
{
//贴背景图
SelectObject(bufdc,bg);
BitBlt(mdc,0,0,WIDTH,HEIGHT,bufdc,0,0,SRCCOPY);
//贴物体图
SelectObject(bufdc,dra);
BitBlt(mdc,x,y,50,50,bufdc,50,0,SRCAND);
BitBlt(mdc,x,y,50,50,bufdc,0,0,SRCPAINT);
BitBlt(hdc,0,0,WIDTH,HEIGHT,mdc,0,0,SRCCOPY);
x+=vx; //计算x轴方向物体坐标
vy+=gy; //计算y轴方向速度分量
y+=vy; //计算y轴方向贴图坐标
if(x<=rect.right)
{
if(y>=rect.bottom-50)
{
y=rect.bottom-50;
vy=-vy-1;
}
}
else
{
x=0;
if(y>=rect.bottom-50)
{
y=rect.bottom-50;
vy=-vy-1;
}
}
tPre=GetTickCount();
}
相关文章推荐
- flash中物体运动基础之二---------匀加速运动
- [js高手之路]html5 canvas动画教程 - 重力、摩擦力、加速、抛物线运动
- 关于Cocos2D-X在pause时物理世界物体仍缓慢受重力影响的解决方案
- 如何让物理世界的物体不受重力影响
- Unity游戏开发的数学与物理 4 ( 在物体运动中加入重力 )
- flash中物体运动基础之三---------摩擦力,重力,风力,推力,旋转
- 转:运动物体跟踪的camshift算法
- Unity利用AnimationCurve做物体的各种运动
- 视频监控中运动物体检测与跟踪----相邻帧差法和三帧差法
- 光流法 运动物体检测[Eng]
- [js]多个物体的运动
- 单目深度估计(Monocular Depth Estimation)之摄像机运动对深度估计的影响
- JavaScript物体运动二
- 在“五四”爱国运动的影响下,我国相继建立了哪些社会主
- cocos2d-x for wp之EaseActions——运动加速效果
- JavaScript多物体运动一
- js多物体不同运动框架(标签样式)
- 基于Aforge的物体运动识别-入门篇
- javascript学习-原生javascript的小特效(多物体运动效果)
- JavaScript多物体运动及函数封装