界面是游戏中必不可少的一部分,就算你进入游戏没有看到什么UI窗口,你也不必着急,因为多多少少都会有隐藏着的界面等你去体验。一个好的UI大部分应该归功于设计的人与提供美术支持的人员,因为他们是直接设计UI的人,而程序只提供一些显示的功能支持。本次用到的UI渲染为开源的CEGUI,想必很多做游戏的朋友都能耳熟能详了吧。好了,就让我们看看在本次设计中用到了那些与UI有光的方法吧。
CODE
模块ui 文件creature_headboard.h --对象头顶板UI
* PAP Engine ( -- )
* $Id system.h
* @link -- for the canonical source repository
* @copyright Copyright (c) 2013-2014 viticm( viticm@126.com )
* @license
* @user viticm<viticm@126.com/viticm.ti@gmail.com>
* @date 2014-3-21 12:05:53
* @uses vengine ui system module
*/
#ifndef VENGINE_UI_SYSTEM_H_
#define VENGINE_UI_SYSTEM_H_
#include "vengine/config.h"
#include "vengine/game/itemtransfer_system.h"
#include "vengine/ui/creature_headboard.h"
namespace vengine_ui {
typedef enum {
kTalkTemplateNobody,
kTalkTemplateOther,
kTalkTemplateSelf,
kTalkTemplateMax
} talktemplate_enum;
typedef enum {
kFilterTypeNone, //无类型
kFilterTypeChat, //聊天
kFilterTypeRole, //角色创建
kFilterTypeName, //命名
kFilterTypeStall, //摆摊
kFilterTypeMax
} filtertype_enum;
typedef enum {
kFilterLevelNoMatch, //忽略
kFilterLevelPartMatch, //部分匹配
kFilterLevelFullMatch, //完全匹配
kFilterLevelMax
} filterlevel_enum;
//static
const uint16_t kHelpStringMax = 200;
static const char* kHelpStringKey = "help"; //this if have problem
//then change it to macros
//interface for ui system
class VENGINE_API System : public vengine_kernel::Node{
VENGINE_KERNEL_DECLARE_DYNAMIC(vengine_ui_System);
public:
virtual void on_windowsize_change(uint32_t message,
WPARAM wparam,
LPARAM lparam) = 0; //窗口大小改变事件
virtual void injectinput() = 0; //如果事件结果为true则获取了输入
virtual bool messageprocess(HWND hwnd,
uint32_t message,
WPARAM wparam,
LPARAM lparam) = 0; //文字输入消息
virtual bool is_mousehover() = 0; //鼠标是否在UI上空
//鼠标是否在聊天板上空
virtual bool is_mousehover_chatboard(int64_t x, int64_t y) = 0;
//获得聊天信息里的超链接信息
virtual STRING get_chatboard_hyplink_content(int64_t x, int64_t y) = 0;
//创建一个新的角色信息板
virtual CreatureHeadBoard* create_creature_headboard() = 0;
//添加一个新的被击中信息框
virtual void add_behit_board(bool _double,
const char* info,
float startx,
float starty,
uint8_t type = 0,
uint8_t movetype = 0) = 0;
virtual bool is_windowshow(const char* name,
const char* childname = NULL) = 0;
virtual bool close_allwindow() = 0;
//通知UI创建一组UI显示模型
virtual void fakeobject_show(const char* windowname, const char* name) = 0;
//知UI销毁一组UI显示模型
virtual void fakeobject_destroy(const char* windowname,
const char* name) = 0;
//debugs
public:
virtual void debug_push_chatstring(const char* name,
const 手把手教你做关键词匹配项目(搜索引擎)---- 第十天 - oShine.Q 阅读原文»
第十天
起点:
1. 手把手教你做关键词匹配项目(搜索引擎)---- 第一天
回顾:
9. 手把手教你做关键词匹配项目(搜索引擎)---- 第九天
小帅帅收到记录Log的任务后,就安心去研究去了。。。
其实按照于老大的水平来说,看惯了开源框架,写个普通的Logger是轻而易举,他为什么要小帅帅去做呢?
小帅帅当时其实也想不通,因为他没有经历过那个阶段。
小帅帅的想法其实也挺简单,就是完成于老大给的任务,成为可以胜任这项工作的好员工。
小帅帅这个阶段对需求不敏感,所以一接到任务他就去研究技术细节去了。 殊不知代码已经写好了。
小帅帅的初稿,就是尝试用面向对象的思维能力去写这个记录Log的任务, 初稿如下:
public static function log($message){
$file = fopen('application.error.log', "a+");
fwrite($file, $message);
fclose($file);
}
}
那么TopClient的代码如下:
......
protected function logCommunicationError($apiName, $requestUrl, $errorCode, $responseTxt)
{
$localIp = isset($_SERVER["SERVER_ADDR"]) ? $_SERVER["SERVER_ADDR"] : "CLI";
$logData = "API_NAME:$apiName,APP_KEY:$this->appkey,CLIENT_IP:$localIp,SDK_VERSION:$this->sdkVersion,REQUEST_URL:$requestUrl,ERROR_CODE:$errorCode,ERROR_MSG:".str_replace("\n","",$responseTxt);
Logger::log($logData);
}
......
}
其实这是一个进步,小帅帅终于在慢慢转变自己的思维能力。
当小帅帅拿着这份代码找到于老大时,于老大很高心,但是不是他想要的成果,于是于老大就对小帅帅说:
1. 如果你要记录错误log,你期望怎么去用,期望看到哪些信息。
2. 如果你要记录警告log, 你期望怎么去用,期望看到哪些信息。
3. 如果你要调试,想看看代码的执行效率,你期望怎么去用,期望看到哪些信息。
三个为什么把小帅帅给压倒了,小帅帅一听,有点气闯不过来。
就这样小帅帅就去思索于老大说的话。
小帅帅有幸能听懂其中的含义的时候,所学的心法就更加强大,我们期待小帅帅能够开窍。
本文链接:手把手教你做关键词匹配项目(搜索引擎)---- 第十天,转载请注明。
没有评论:
发表评论