物体的阻尼运动
来源:互联网 发布:java线程池代码 编辑:程序博客网 时间:2024/04/28 07:53
#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表示物体的初始位置
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>=30)
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(y>=rect.bottom-50)
{
y=rect.bottom-50;
vx-=1;
if(vx<0)
vx=0;
vy-=4;
if(vy<0)
vy=0;
vy=-vy;
}
tPre=GetTickCount();
}
- 物体的阻尼运动
- android 带阻尼的周期运动
- 模拟阻尼运动
- 有关物体运动的研究。
- 运动物体检测的问题
- 物体运动的切线方向
- 物体的运动单元练习题
- Unity 简单的物体运动
- 运动物体的检测 初
- 阻尼摆运动的系统动力学VENSIM模拟仿真
- 转:运动物体跟踪的camshift算法
- 运动物体跟踪的camshift算法
- 基于camshift的运动物体跟踪分析
- 运动物体跟踪的camshift算法
- Android游戏的基础:物体运动效果
- [Unity3D]简单的物体运动和外力作用
- Android游戏的基础:物体运动效果
- Unity3D入门 第肆章 :简单的物体运动
- android文件的保存与读取
- jdk与jre的区别
- 第十六周项目三-逆序排列
- #define总结 (网上资料汇集)
- JS中字符问题(二进制/十进制/十六进制之间的转换),颜色进制转换
- 物体的阻尼运动
- 数据网格,分布式缓存,No-SQL数据库,Key/Value数据存储
- 语音识别
- 视频处理控件TVideoGrabber如何并行处理多摄像头
- 栈的应用--表达式计算&中缀转后缀
- 最简单有效的处理方法解决安装SQL Server2005时出现COM+的警告
- 断点续传的实例
- 扫雷
- CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Pager”(是否缺少程序集引用?)