游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4309|回复: 8

求助,如何使用一个线程 实现挂机功能

[复制链接]

2

主题

8

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2013-11-7 13:08:14 | 显示全部楼层 |阅读模式
如何使用一个线程 实现在线挂机功能
规则是:玩家申请挂机 启动后每15秒就增加经验



0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2013-11-12 08:20:26 | 显示全部楼层
1.我把所有申请挂机的玩家保存到一个线程安全的集合中。
2.在玩家的实体里添加一个申请挂机的时间
3.设计一个挂机线程首次运行延迟1秒后执行一次,之后每隔1秒执行一次。

    当有玩家申请挂机后,就启动该线程,线程每隔1秒迭代一次申请挂机的玩家集合,
判断当前时间-申请挂机时间是否>=15秒,满足就给玩家增加经验,并把申请的挂机时间更新为当前时间。

2

主题

8

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2013-11-15 15:44:18 | 显示全部楼层
...这个是我博客上写的。

2

主题

8

帖子

49

积分

注册会员

Rank: 2

积分
49
 楼主| 发表于 2013-11-15 15:45:31 | 显示全部楼层
其实这么做还是不好, 挂机时间不能当作是玩家的一个属性,应该在挂机服务里保留玩家的挂机开始时间

0

主题

5

帖子

72

积分

注册会员

Rank: 2

积分
72
发表于 2013-11-16 11:57:36 | 显示全部楼层
直接玩家上线时候计算一次就行了

0

主题

2

帖子

8

积分

新手上路

Rank: 1

积分
8
发表于 2013-12-2 17:36:36 | 显示全部楼层
一群新手还好意思跟帖,误人子弟不是,哥实在忍不住发帖了。

15秒自动增加经验的挂机程序的完美解决方案。
服务端只记录上一次更新的时间点,登陆的时候传给客户端剩余时间,然后客户端自己设置定时器到点 定点发送请求增加经验的命令给服务端

15 14 13 12 11 .... 1 发送命令,服务端校验上次更新时间和这次客户端请求的时间间隔是否大于15秒。大于增加,否就提示CD时间未冷却即可。

服务端定义线程,一个用户一个,1000人在线不是要定义1000个?

9

主题

75

帖子

112

积分

注册会员

Rank: 2

积分
112
发表于 2014-1-12 22:38:52 | 显示全部楼层
有必要放在另外一个线程?难道你在线玩家没有一个更新入口?这种放在逻辑线程就行了撒。。。。

0

主题

12

帖子

46

积分

注册会员

Rank: 2

积分
46
发表于 2014-2-22 17:28:30 | 显示全部楼层
onlytest 发表于 2013-12-2 17:36
一群新手还好意思跟帖,误人子弟不是,哥实在忍不住发帖了。

15秒自动增加经验的挂机程序的完美解决方案。 ...

这种方式的确不错,但是还是会存在一个问题,某些情况下比如浏览器最小化,客户端的帧率会下降,从而会影响到定时器,于是自动加经验可能会不太准确

0

主题

2

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2014-3-14 10:17:02 | 显示全部楼层
onlytest 发表于 2013-12-2 17:36
一群新手还好意思跟帖,误人子弟不是,哥实在忍不住发帖了。

15秒自动增加经验的挂机程序的完美解决方案。 ...

这种只要记下开始挂机时间,然后在结束挂机或者下线的时候一起结算经验就行了,不用多加线程,不用客户端通知。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-2-26 05:21

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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