扑克发牌动画 动画算法mfc 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 找个gif图片,然后贴图不是更简单一些? 主要是想学学简单的动画,不过你的回答也是我疑惑的地方,MFC为什么要搞一些乌七八糟的GDI,直接引用别人专业的素材就可以了,难道程序员都要会画画?就好像win系统自带的画图一样。跟小孩子过家家一样的东西。 第一,GDI是为了那些图形处理软件还有各种游戏引擎和UI设计的,因为那些需要这个,第二,想做出你说的这种效果,我有个想法用MFC里面的CStatic类显示图片,然后不断修改他的坐标达到动画效果 void CChildView::OnPaint(){ CPaintDC dc(this); // 用于绘制的设备上下文 // TODO: 在此处添加消息处理程序代码 // 不要为绘制消息而调用 CWnd::OnPaint() CDC *cDC = this->GetDC(); GetClientRect(&m_client); m_cacheDC.CreateCompatibleDC(NULL); m_cacheCBitmap.CreateCompatibleBitmap(cDC, m_client.Width(), m_client.Height()); m_cacheDC.SelectObject(&m_cacheCBitmap); ValidateRect(&m_client); m_gameback.Draw(m_cacheDC, m_client); for (int i = 0; i < m_cardsnum; i++) m_card.Draw(m_cacheDC, cardx + i * 4, cardy, 71, 96, 923, 192, 71, 96);//准备一堆牌,并且发牌时慢慢减少一张牌 if (isfapai) { int kk = 54 - m_cardsnum; //kk就是已经发的扑克牌数 在ONTIMER中m_cardsnum- -; for (int j = 0; j < kk; j++) { timer = (int)(j / 3+1); //timer就是发的轮数,3个人都发过了算一轮。 if (j % 3 == 0) for (int i = 0; i <timer; i++) m_card.Draw(m_cacheDC, play1x, play1y + i * 8, 71, 96, 923, 192, 71, 96); if (j % 3 == 2) for (int i = 0; i < timer; i++) m_card.Draw(m_cacheDC, play2x, play2y + i * 8, 71, 96, 923, 192, 71, 96); if (j % 3 == 1) for (int i = 0; i < timer; i++) m_card.Draw(m_cacheDC, play3x + i * 14, play3y, 71, 96, 923, 192, 71, 96); } } cDC->StretchBlt(0, 0, m_client.Width(), m_client.Height(), &m_cacheDC, 0, 0, m_client.Width(), m_client.Height(), SRCCOPY); m_cacheDC.DeleteDC(); m_cacheCBitmap.DeleteObject(); ReleaseDC(cDC);}图片的LOAD 在PreCreateWindow中,其他变量也很好理解。测试逻辑是对的。但问题是,不知道是不是循环太多。运行起来比较慢。如果后面再加飞牌的动画效果更糟糕了。有好的逻辑吗?或者问题在哪里?? vc用读卡器编程 关于CSplitterWnd多视图切分并切换问题,如何保存住所有视图状态 高手进! CPropertySheet的两个page里定义变量如何共享存取 文件包含的问题!大家进来拿分! 关于XP的IPC$ 连接问题! 经理出题考我,非常急!!快帮忙! 急! F1 help 为何不能使用 在线求助:数据库的查询 我有点糊涂了,请教各位两个问题:1)控件与容器的关系... socket文件传输 服务器接收到的文件总是不超过24k 大家帮我看看代码 子线程处理数据,主线程更新界面的问题
{
CPaintDC dc(this); // 用于绘制的设备上下文 // TODO: 在此处添加消息处理程序代码 // 不要为绘制消息而调用 CWnd::OnPaint()
CDC *cDC = this->GetDC();
GetClientRect(&m_client);
m_cacheDC.CreateCompatibleDC(NULL);
m_cacheCBitmap.CreateCompatibleBitmap(cDC, m_client.Width(), m_client.Height());
m_cacheDC.SelectObject(&m_cacheCBitmap);
ValidateRect(&m_client);
m_gameback.Draw(m_cacheDC, m_client);
for (int i = 0; i < m_cardsnum; i++)
m_card.Draw(m_cacheDC, cardx + i * 4, cardy, 71, 96, 923, 192, 71, 96);//准备一堆牌,并且发牌时慢慢减少一张牌
if (isfapai)
{
int kk = 54 - m_cardsnum; //kk就是已经发的扑克牌数 在ONTIMER中m_cardsnum- -;
for (int j = 0; j < kk; j++)
{
timer = (int)(j / 3+1); //timer就是发的轮数,3个人都发过了算一轮。
if (j % 3 == 0)
for (int i = 0; i <timer; i++) m_card.Draw(m_cacheDC, play1x, play1y + i * 8, 71, 96, 923, 192, 71, 96);
if (j % 3 == 2)
for (int i = 0; i < timer; i++)
m_card.Draw(m_cacheDC, play2x, play2y + i * 8, 71, 96, 923, 192, 71, 96);
if (j % 3 == 1)
for (int i = 0; i < timer; i++)
m_card.Draw(m_cacheDC, play3x + i * 14, play3y, 71, 96, 923, 192, 71, 96);
}
}
cDC->StretchBlt(0, 0, m_client.Width(), m_client.Height(), &m_cacheDC, 0, 0, m_client.Width(), m_client.Height(), SRCCOPY);
m_cacheDC.DeleteDC();
m_cacheCBitmap.DeleteObject();
ReleaseDC(cDC);
}
图片的LOAD 在PreCreateWindow中,其他变量也很好理解。测试逻辑是对的。但问题是,不知道是不是循环太多。运行起来比较慢。如果后面再加飞牌的动画效果更糟糕了。有好的逻辑吗?或者问题在哪里??