当前位置:网站首页>Novice guidance and event management system in game development
Novice guidance and event management system in game development
2020-11-06 21:14:36 【Chen Guangwen】
Preface
At the end of game development , Most games will be connected to the novice guide function , Enhance the player's game experience , Not to let the player into the game, there is a sense of cold or at a loss . It is estimated that there are 100 ways for a hundred people to guide them , Next, I'm going to share how I use it , And with the discussion of some problems .
Teaching guidance
1. Focus with a simple mask .
This way can distract the player's attention , After all, there is a lot of content when you enter the game , But people's ability to accept is limited . You can decide whether there is a mask based on the configuration table settings
2. Put guidance at the top , Screen touch events
This way is easier , It also avoids the guide error caused by the player's random point . But we can use the configuration table , Decide if this step is mandatory guidance , If not, you can not block the event .
3. How to get the finger position
Through the configured interface node name , The control name gets the node directly . Here we use the form of array to configure , It's reserved for drag and drop teaching . Let your fingers slide from one position to another .
setWidget() {
if (this.widget) {
return;
}
let parent = EngineHelper.findChild(this.className, UIManager.instance().getRoot())
if (parent) {
if (this.widgetName) {
if (this.widgetName == 'this') {
this.widget = parent;
} else {
this.widget = EngineHelper.findChild(this.widgetName, parent)
}
if (this.index >= 0) {
this.widget = this.widget.children[this.index]
if (this.index2 >= 0) {
this.widget = this.widget.children[this.index2]
}
}
} else {
this.widget = parent;
}
}
}
Then, the coordinates of the nodes are assigned to the fingers through transformation
3. How to trigger a function .
Configure the nodes in the data table , Components , And function name When the user clicks his finger , Call... Directly through code
trigger() {
if (this.widget) {
let comp = this.widget.getComponent(this.compName)
if (comp) {
comp[this.funcName]();
}else{
cc.warn(' comp is null ',this.compName)
}
}
}
Complete teaching data sheet
Event manager
Various events may be triggered in the game , Teaching is just one of them , It's also possible to prompt , Set the node to hide , Assign a character to a point , wait . The event manager decides whether to turn on or not according to the specific conditions and judgment conditions . The possible types are
Contrast type :
Compare the value passed in at trigger time with the demand value in the data sheet , Judge whether the first stage is tenable . If it is true to judge whether the additional conditions are true , If set up , So the event starts . Perform each step in the event table . The reason why two judgments are added here is for the sake of efficiency , When a type of event is triggered, only the event corresponding to that type is checked .
4. Event handling
In the data table to configure each step to do things and parameters The first column is the event execution sequence number , Unique identification . The second column is events ID, It's an index column , If you pass in 1 You're going to get directly a containing [1,2,3] Array of The third column is the setting of whether to archive or not , That is, where to archive , If it's online games , Which step tells the server that the event ends . The fourth column It's the type of operation ,
Organize all the functions through code . So , Teaching is just a small part of the event management system .
update() {
let item = this.event.getItemModel()
// cc.log('update ================= step ', this.step, ' this.eventID ', this.eventID)
switch (item.getOperateType()) {
case OperateType.OPEN_DIALOG:
break;
case OperateType.OPEN_GUIDE:
GuideManager.instance().start(item.getParam())
break;
case OperateType.OPEN_TIP:
TipController.instance().showTip(item.getParam(), () => {
this.event.next()
})
break;
case OperateType.IN_VISIBLE:
let list = item.getParam().split(':')
let parent = UIManager.instance().getRoot()
while (list.length > 0) {
let name = list.shift();
let node = EngineHelper.findChild(name, parent)
if (node) {
parent = node;
} else {
break;
}
}
cc.log(' list.length =========== ', list.length)
if (parent && list.length == 0) {
parent.active = false;
this.event.next()
}
break;
default:
this.emit(GameEventName.EVENT_UPDATE, item)
break;
}
}
According to your own defined processing type , Configure different parameters in the data table , Do different things in the code . It has been defualt Because some operations are not accessible to the manager . For example, the operation of the characters in the game , It should be about the emulator , So the emulator listens for events , And then according to the different Call different functions , Implement different logic .
5. When to check Events
The timing of event checking depends on the defined trigger type , When your conditions hold , Need to actively call the event manager checkEvent function , Input the corresponding trigger condition type , And a specific value . Here are a few examples .
-
After entering the interface, enter the start Active check in function
-
When the interface has been opened, receive the notification triggered by the event manager through the event .
-
When UI closed . For example, offline rewards may pop up when you first enter the hall , Check in, etc , Trigger when these interfaces are closed .
summary
The above is the event management system I use in game development , In theory, you can do whatever you want . The code has been submitted to the framework project . If you are interested, you can do your own research .
Welcome to scan code to pay attention to official account. 《 Smile game 》, Browse more .
<figcaption style="margin: 5px 0px 0px; padding: 0px; box-sizing: border-box !important; display: block; max-width: 100%; overflow-wrap: break-word !important; text-align: center; color: rgb(136, 136, 136); font-size: 14px;"> Wechat pictures _20190904220029.jpg</figcaption>
More
Cross engine game development framework
Little games SDK Integration Framework
Use quadtree to optimize collision detection
Game development UI The use of manager
How to use local archive gracefully in game development
sdk Access Integration , Switch channels with a variable
CocosCreator And AssetBundle Share with solutions
CocosCreator An implementation of the color game
A network module that can block long and short links
Welcome to scan code to pay attention to official account. 《 Smile game 》, Browse more .
版权声明
本文为[Chen Guangwen]所创,转载请带上原文链接,感谢
边栏推荐
- C++ 数字、string和char*的转换
- C++学习——centos7上部署C++开发环境
- C++学习——一步步学会写Makefile
- C++学习——临时对象的产生与优化
- C++学习——对象的引用的用法
- C++编程经验(6):使用C++风格的类型转换
- Won the CKA + CKS certificate with the highest gold content in kubernetes in 31 days!
- C + + number, string and char * conversion
- C + + Learning -- capacity() and resize() in C + +
- C + + Learning -- about code performance optimization
猜你喜欢
-
C + + programming experience (6): using C + + style type conversion
-
Latest party and government work report ppt - Park ppt
-
在线身份证号码提取生日工具
-
Online ID number extraction birthday tool
-
️野指针?悬空指针?️ 一文带你搞懂!
-
Field pointer? Dangling pointer? This article will help you understand!
-
HCNA Routing&Switching之GVRP
-
GVRP of hcna Routing & Switching
-
Seq2Seq实现闲聊机器人
-
【闲聊机器人】seq2seq模型的原理
随机推荐
- LeetCode 91. 解码方法
- Seq2seq implements chat robot
- [chat robot] principle of seq2seq model
- Leetcode 91. Decoding method
- HCNA Routing&Switching之GVRP
- GVRP of hcna Routing & Switching
- HDU7016 Random Walk 2
- [Code+#1]Yazid 的新生舞会
- CF1548C The Three Little Pigs
- HDU7033 Typing Contest
- HDU7016 Random Walk 2
- [code + 1] Yazid's freshman ball
- CF1548C The Three Little Pigs
- HDU7033 Typing Contest
- Qt Creator 自动补齐变慢的解决
- HALCON 20.11:如何处理标定助手品质问题
- HALCON 20.11:标定助手使用注意事项
- Solution of QT creator's automatic replenishment slowing down
- Halcon 20.11: how to deal with the quality problem of calibration assistant
- Halcon 20.11: precautions for use of calibration assistant
- “十大科学技术问题”揭晓!|青年科学家50²论坛
- "Top ten scientific and technological issues" announced| Young scientists 50 ² forum
- 求反转链表
- Reverse linked list
- js的数据类型
- JS data type
- 记一次文件读写遇到的bug
- Remember the bug encountered in reading and writing a file
- 单例模式
- Singleton mode
- 在这个 N 多编程语言争霸的世界,C++ 究竟还有没有未来?
- In this world of N programming languages, is there a future for C + +?
- es6模板字符
- js Promise
- js 数组方法 回顾
- ES6 template characters
- js Promise
- JS array method review
- 【Golang】️走进 Go 语言️ 第一课 Hello World
- [golang] go into go language lesson 1 Hello World