你画我猜游戏现在现已随处可见,语聊房中的游戏里一般都会有该模块,还有一些小程序里也做了类似的场景。今天就来聊下怎么快速做一款你画我猜游戏。

1:完成多端实时互动白板,这儿运用anyRTC 互动白板SDK

2:你画我猜题目服务,本demo演示怎么一个人画,多人看猜,本demo省略该服务

3:答案提示/公布,该功能需求IM支持,这儿运用anyRTC 实时音讯 SDK 来完成

4:多人语音沟通,该功能需求音视频计划,这儿运用anyRTC 音视频SDK来完成

Demo 全体效果

IOS技术分享| 你画我猜小游戏快速实现

跑通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)
    }

总结

运用现成的解决计划,可有用节约开发者的时间,咱们只需求重视事务完成即可。更多场景完成,重视我☺

IOS技术分享| 你画我猜小游戏快速实现