游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5407|回复: 18

DirectPlay中的图象抖动问题

[复制链接]

1

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
发表于 2007-4-29 19:50:00 | 显示全部楼层 |阅读模式
请教DirectPlay方面的问题:调用Peer对象的SendTo()方法向Host发送飞机的位置消息。Host每帧除了显示本地飞机外,还根据接收到的消息,显示远程玩家的飞机。能够显示,但远程飞机显示时发生位置前后抖动的情况。请问有人知道怎么解决抖动问题吗?

1

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
 楼主| 发表于 2007-4-29 20:22:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

谢谢。
是多线程模型!

我怀疑是绘制图形的render()方法和处理接收到消息的方法,二者同步出了问题。也就是说每次显示的时候,用的位置信息可能是以前发过来的,或者是不是对接收到的消息处理不及时。

10

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2007-4-29 20:36:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

你是否在call back 函数中把NETMSG 放到一个数据结构中,在回调函数外处理netmsg?

1

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
 楼主| 发表于 2007-4-29 21:12:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

在call back函数中,处理 RECEIVE_MESSAGE消息时,调用了另外一个类的方法,同时把所需的参数传递过去。
有什么问题吗?

1

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
 楼主| 发表于 2007-4-29 21:14:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

怎样用了dplay的多线程模型?是在工程的属性里设置MTD吗?还是初始化COM构件时选择多线程模式?

1

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
 楼主| 发表于 2007-4-29 21:17:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

这个问题我折腾了好久了!:(
我觉得不是同步问题,可能就是我使用DirectPlay的接口时参数设置有问题。

10

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2007-4-29 21:21:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

如果你用了DPLAY多线程模型,就是没有设置THREADPOOL的数量为0并且调用DOWORK处理NETMSG

这种情况下,每个NETMSG的到达DPLAY会启动一个DirectPlayMessageHandler线程处理它。

这时候,就必须考虑线程同步问题。

10

主题

69

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2007-4-29 21:30:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

多线程程序在设计上有一定难度,建议你先用单线程实现。
然后分析模型,再修改代码成为多线程。
我的c/s程序中客户端用的单线程模型
//init directplay
        hr = CoCreateInstance( CLSID_DirectPlay8ThreadPool, NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_IDirectPlay8ThreadPool,
                          (LPVOID*) &g_pThreadPool );
        hr = g_pThreadPool->Initialize(NULL, DirectPlayMessageHandler, 0 );

    if( FAILED( hr = g_pThreadPool->SetThreadCount( (DWORD) -1, 0, 0 ) ) )
    {
        DXTRACE_ERR_MSGBOX( TEXT("Failed calling SetThreadCount"), hr );
    }
//end init directplay

//frame move
    g_pThreadPool->DoWork( 100, 0 );
//end frame move

1

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
 楼主| 发表于 2007-4-29 21:39:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

多谢指点!
我先试一下。

1

主题

12

帖子

12

积分

新手上路

Rank: 1

积分
12
 楼主| 发表于 2007-4-29 22:03:00 | 显示全部楼层

Re:DirectPlay中的图象抖动问题

还是不行啊,痛苦!

怎么能让render()所在的线程和DirectPlayMessagerHandle()回掉函数所在的线程同步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 14:25

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表