你画我猜游戏现在现已随处可见,语聊房中的游戏里一般都会有该模块,还有一些小程序里也做了类似的场景。今天就来聊下怎么快速做一款你画我猜游戏。
1:完成多端实时互动白板,这儿运用anyRTC 互动白板SDK
2:你画我猜题目服务,本demo演示怎么一个人画,多人看猜,本demo省略该服务
3:答案提示/公布,该功能需求IM支持,这儿运用anyRTC 实时音讯 SDK 来完成
4:多人语音沟通,该功能需求音视频计划,这儿运用anyRTC 音视频SDK来完成
Demo 全体效果
跑通Demo
-
下载demo源码
-
装备开发者信息:找到 AppID.swift 文件并装备 AppID
-
找到项目根目录履行:pod install,加载demo依靠库
-
连接真机跑通demo
项目源码剖析
|– GuessDraw |– Podfile //Pod装备项
|– ARDrawDemo | |– ARBoard.framework //白板SDK | |– Base | | |– ARKeyboardInputViewController.swift // 聊天输入框 | | |– AppDelegate.swift // 程序进口 | | |– SceneDelegate.swift
| | |– ViewController.swift // 主页面 | |– Board | | |– ARBoardViewController.swift // 你猜我画控制器 | | |– ARChatViewController.swift // 聊天音讯控制器 | | |– View | | |– ARSelectedView.swift // 选择器页面 | |– Common | |– ARExtension.swift // 拓展 | |– AppID.swift // 开发者信息装备 |– Pods
完成细节
- 初始化白板
let authParam = ARBoardAuthParam()
// 开发者信息装备
authParam.appId = AppID
// 标识用户ID
authParam.uid = getUid()
let baseParam = ARBoardBaseParam()
// 默许不行修改
baseParam.authConfig.drawEnable = false
// 白板的宽高比例为1:1
baseParam.config.ratio = "1:1"
// 白板画笔颜色为赤色
baseParam.styleConfig.brushColor = UIColor.red
// 白板画笔粗细为2
baseParam.styleConfig.brushThin = 2
// 初始化白板
boradKit = ARBoardKit(authParam: authParam, roomId: self.roomId, boardParam: baseParam, delegate: self)
// 画板View
boardView = boradKit.getBoardRenderView()
- 初始化 IM 聊天
// 初始化RTM
rtmKit = ARtmKit(appId: AppID, delegate: self)!
// 登录RTM
rtmKit.login(byToken: nil, user: getUid()) { [weak self]
errorCode in
guard let weakself = self else { return }
// 创建音讯频道
weakself.rtmChannel = weakself.rtmKit.createChannel(withId: weakself.roomId, delegate: self)
// 参加频道
weakself.rtmChannel?.join(completion: { code in
// 参加频道成功
if code == .channelErrorOk {
weakself.joinChannel = true
// 获取频道特点
weakself.getChannelAttributes()
}
})
}
- 初始化语音聊天
// 初始化
rtcKit = ARtcEngineKit.sharedEngine(withAppId: AppID, delegate: self)
// 设置频道特点为直播形式
rtcKit.setChannelProfile(.liveBroadcasting)
// 设置角色为主播,参加频道后自动上麦
rtcKit.setClientRole(.broadcaster)
// 设置音频特点,运用媒体形式
rtcKit.setAudioProfile(.musicStandard, scenario: .gameStreaming)
// 参加频道
rtcKit.joinChannel(byToken: nil, channelId: self.roomId, uid: getUid()) { channel, uid, elapsed in
// 参加成功
}
- 是否有绘画权限
运用 RTM 频道特点来确认绘画
获取权限
let options = ARtmChannelAttributeOptions()
// 频道特点更改是否要告诉频道内的用户
options.enableNotificationToChannelMembers = true
// 频道特点
let attribute: ARtmChannelAttribute = ARtmChannelAttribute()
attribute.key = ARKeyChannel
attribute.value = randomString(length: 9)
// 增加或许更新频道
rtmKit.addOrUpdateChannel(self.roomId, attributes: [attribute], options: options) { errorCode in
if errorCode == .attributeOperationErrorOk {
}
}
释放权限
let option :ARtmChannelAttributeOptions = ARtmChannelAttributeOptions()
option.enableNotificationToChannelMembers = true
rtmKit.deleteChannel(self.roomId, attributesByKeys: [ARKeyChannel], options: option) { erroCode in
}
监听频道特点改变
监听频道特点改变,进行页面布局更改
// 频道特点更新回调
func channel(_ channel: ARtmChannel, attributeUpdate attributes: [ARtmChannelAttribute]) {
// 状态更改
changeStateWithAtt(attributes: attributes)
}
总结
运用现成的解决计划,可有用节约开发者的时间,咱们只需求重视事务完成即可。更多场景完成,重视我☺