vue项目使用websocket技术

一、为什么需要websocket?

  前端和后端的交互模式最常见的就是前端发数据请求,从后端拿到数据后展示到页面中。如果前端不做操作,后端不能主动向前端推送数据,这也是http协议的缺陷。

  因此,一种新的通信协议应运而生—websocket,他最大的特点就是服务端可以主动向客户端推送消息,客户端也可以主动向服务端发送消息,实现了真正的平等。

websocket其他特点如下:

(1)建立在 TCP 协议之上,服务器端的实现比较容易。

(2)与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。

(3)数据格式比较轻量,性能开销小,通信高效。

(4)可以发送文本,也可以发送二进制数据。

(5)没有同源限制,客户端可以与任意服务器通信。

(6)协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

二、vue项目如何引用websocket?

vue使用websocket需要注意以下几点:

(1)首先需要判断浏览器是否支持websocket,关于如何解决兼容性问题可以参考 这里这里

(2)在组件加载的时候连接websocket,在组件销毁的时候断开websocket

(3)后端接口需要引入socket模块,否则不能实现连接

不废话了,直接附上完整代码:

复制代码
<template>
    <div>
        <button @click="send">发消息</button>
    </div>
</template>

<script>
export default {
    data () {
        return {
            path:"ws://192.168.0.200:8005/qrCodePage/ID=1/refreshTime=5",
            socket:""
        }
    },
    mounted () {
        // 初始化
        this.init()
    },
    methods: {
        init: function () {
            if(typeof(WebSocket) === "undefined"){
                alert("您的浏览器不支持socket")
            }else{
                // 实例化socket
                this.socket = new WebSocket(this.path)
                // 监听socket连接
                this.socket.onopen = this.open
                // 监听socket错误信息
                this.socket.onerror = this.error
                // 监听socket消息
                this.socket.onmessage = this.getMessage
            }
        },
        open: function () {
            console.log("socket连接成功")
        },
        error: function () {
            console.log("连接错误")
        },
        getMessage: function (msg) {
            console.log(msg.data)
        },
        send: function () {
            this.socket.send(params)
        },
        close: function () {
            console.log("socket已经关闭")
        }
    },
    destroyed () {
        // 销毁监听
        this.socket.onclose = this.close
    }
}
</script>

<style>

</style>
复制代码

麒麟子Cocos Creator 3D研究笔记四:天空盒动态更换与IBL效果

麒麟子Cocos Creator 3D研究笔记之材质IBL与天空盒动态切换

在线演示地址: https://showcase.ukylin.net/skybox/


天空盒对于3D渲染场景来说,有着不个忽视的地位。天空盒决定了整个场景的氛围。

晴天、雨夜、黄昏、黎明等场景,只要换上一个天空盒,瞬间达到60%的效果。

Cocos Creator 3D作为一款高端引擎,这东西自然是要提供的。官方文档如下:https://docs.cocos.com/creator3d/manual/zh/concepts/scene/skybox.html

本文介绍了Cocos Creator 3D中天空盒的使用,以及各项参数的含义。并提供了十套可直接用于项目的天空盒素材。文末有获取链接


由于 官方文档讲得比较全了,并且这个东西的使用也比较简单。我就来说一下文档中没有讲到的部分。

一、动态切换天空盒

动态切换天空盒是一个多场景游戏或者天气系统所必须拥有的能力。它将用在以下几种情况。

时段变换,比如魔兽世界里面的时间就是和现实对应的,你是白天,它就是白天。你是黄昏,它就是黄昏。你是黑夜它就是黑夜。

PS:麒麟子一开始玩魔兽世界的时候,都是晚上玩,我一直以为魔兽世界里面都是黑夜呢。哈哈。

动态切换天空盒代码示例:

loader.loadRes('skybox/cubemap_sky' + skyboxName, TextureCube, (err, cubemap: TextureCube) => {    director.getScene().globals.skybox.envmap = cubemap;});

值得说明的是,下图里面所有的参数,都可以通过 director.getScene().globals进行修改,如果你要实现一个动态的天气系统,那里面的参数可能都得动。不仅是更换天空盒图片。

有的朋友运行的时候,发现天空盒看不到。那是因为Camera默认是不使用天空盒的,按下图进行设置即可

二、UseIBL开关 

IBL是Image Based Lighting的缩写,就是基于图像的光照。当这个开关打开后,你会发现,物体表面会映射出天空盒的样子。至于映射强度,就需要调节PBR材质的各项参数,如粗糙度,金属度等。 如果要细节控制不同位置的反射强度,则需要制作 PBR贴图。

关于Image Based Lighting我找到了一篇文章供大家进阶:https://blog.csdn.net/i_dovelemon/article/details/79091105

三、IsRGBE开关

这个开关在别的引擎中叫 IsHDR 。 用于标记你所给的立方体纹理是不是采用了HDR贴图。

但HDR贴图不止一种格式,常见的有两种。RadianceRGBE(.hdr) 或 OpenEXR(.exr)格式。RadianceRGBE是 32位格式,而OpenEXR是48位格式。

这个开关不叫IsHDR的原因,我想可能是只支持.hdr这种格式的文件吧。具体是什么原因,有待考证。目前大家只要明白是啥意思就行。

关于HDR相关内容,我也给大家找了一篇 文章:http://www.zf3d.com/news.asp?Id=23189

四、本文总结

天空盒比较简单,但配合各项参数和漂亮的天空盒素材,能让场景氛围和画面带入感增强不少。

如果想要动态天空盒,分层天空盒,目前需要自己使用引擎接口来处理。

源码获取链接:https://gitee.com/qilinzi/creator3ddemos/skybox/

注意!!!cubemap要与图片文件在同一文件夹下面,否则会出现黑屏情况

CocosCreator3D制作CubeMap 给场景添加天空盒

1.创建img文件夹 将准备好的天空盒六张图片放入其中

2.制作与应用 CubeMap

右键事先建好的cubemaps文件夹 选择新建 CubeMap

3.将六张图片拖入到右侧 如图所示 CubeMap制作完成

4.点击scene 在右侧属性检查器中 skybox — 选中 Enabled 并将制作好的CubeMap 拖入到Envmap中

5. 点击Camera 在属性检查器中 将ClearFlags 选为SKYBOX

cocos creator 3D学习(一)载入的模型注意事项+画布上查看模型的鼠标键盘操作方法

一、格式

模型文件需要是fbx的格式,贴图文件放在和fbx文件同级的文件夹中,一起发过来。
比如:文件夹model里面有着一个model1.fbx和一个叫model1的文件夹,我们只需要将model拽到cocos cretor3D中的assets里新建的texure文件夹中即可

二、设计软件

注意:在cocos creator 3D中的模型最好别用3dmax做,因为3dmax导出的fbx贴图有问题,用maya或者c4d都可以,如果已经用3dmax做完了,就让他们用别的3d软件转一下

三、亮度

如果对模型亮度有要求,最好是让做模型的人调整一下贴图材质,会比cocos creator 3D中打光的效果均匀(因为本人刚接触,关于这方面技术很菜)

四、命名要求

贴图中的名称不能有全角和中文,否则拽到cocos3D里贴图贴不上

五、鼠标键盘移动

因为刚接触3D的时候蒙了一天,甚至给自己转的都恶心了,所以还是写一下吧
、按住鼠标右键移动鼠标,是基于鼠标按住的点进行720°旋转
、按住鼠标左键+键盘Alt键,移动鼠标,是对画布模型进行旋转
、滑动鼠标滚轮控制画布放大缩小
、按住鼠标右键,同时按住键盘的w/a/s/d,分别是平移视角向前/左/后/右
、按住鼠标右键,同时按住键盘的w/a/s/d,再移动鼠标,会根据鼠标移动进行带旋转角度的位移(慎用,容易给自己转晕)
以上几条其实做完这个项目发现常用的就是①②③,这几个基本就够用了

最后

cocos creator 3D学习(二)总是浮在屏幕最前面的操作按钮及其他
cocos creator 3D学习(三)一些常用的声明
cocos creator 3D学习(四)刚体
cocos creator 3D学习(五)射线—点击按钮
cocos creator 3D学习(六)光照+阴影

在哪npm install log4js

我们也可以在代码中,用console.log()打印一些控制台日志。 修改routes/index.js…二、配置log4js与express框架集成 1、安装 npm install log4js

1.安装位置: npm install moduleName ,则是将模块下载到当前命令行所在目录。 npm install moduleName -g ,模块将被下载安装到全局目录中,即Node的安装目录下的node_modules下 2.调用方式: 在代码中,本地安装可以直接通过require()的方式

把代理设置为空 npm config set proxy null 设置代理 npm install -g express-generator 安装express

PHP提取富文本字符串中的纯文本,并进行进行截取

/**
* 提取富文本字符串的纯文本,并进行截取;
* @param $string 需要进行截取的富文本字符串
* @param $int 需要截取多少位
*/
public static function StringToText($string,$num){
if($string){
//把一些预定义的 HTML 实体转换为字符
$html_string = htmlspecialchars_decode($string);
//将空格替换成空
$content = str_replace(” “, “”, $html_string);
//函数剥去字符串中的 HTML、XML 以及 PHP 的标签,获取纯文本内容
$contents = strip_tags($content);
//返回字符串中的前$num字符串长度的字符
return mb_strlen($contents,’utf-8′) > $num ? mb_substr($contents, 0, $num, “utf-8”).’….’ : mb_substr($contents, 0, $num, “utf-8”);
}else{
return $string;
}
}

Cocos Creator 3D 打砖块教程(二) | 子弹发射与摄像机平滑移动

在线体验链接:
http://example.creator-star.cn/block3d/

前面一篇文章,我们讲了【打砖块】游戏中的3D物体的场景布局、材质资源、物理刚体与碰撞组件,接下来本篇文章重点介绍“子弹的发射”与“摄像机移动”,有了这两部分我们的【打砖块】游戏就可以初步玩起来了。

子弹的发射

子弹是由 3D 物体 Sphere 球体创建,并将节点改名为 bullet,看下图:

在层级管理器中将 bullet 节点拖动到资源管理器中,将它创建成一个 Prefab 预制体。同时在 bullet 子弹节点上挂载球体碰撞组件(cc.SphereColliderComponent)和刚体组件 (cc.RigidBodyComponent),如下图所示:

有了 bullet 预制体,我们就可以用代码去实例化它,并将他发射出去,创建一个 shoot 的TypeScript 脚本并将它挂载到 Camera 摄像机节点上:

将shoot组件的子弹预制体拖动过去,子弹的移动速度设置为 50,我们通过点击屏幕来进行发射,下面是具体的代码:

import { _decorator, Component, Node, CCObject, Prefab, instantiate, RigidBodyComponent, Vec3 } from "cc";
const { ccclass, property } = _decorator;

@ccclass("shoot")
export class shoot extends Component {
  
    @property(Prefab)
    bullet: Prefab;

    @property(cc.Float)
    speed = 0;
 
    start () {
		//注册全局触摸点击事件
        cc.systemEvent.on(Node.EventType.TOUCH_END, () => {
            this.shoot();
        });
    }

    shoot() {
        //实例化 bullet 预制体
        let node = instantiate(this.bullet);
        node.parent = this.node.parent;
        node.position = this.node.position;
        //为刚体施加冲量
        let bullet:RigidBodyComponent = node.getComponent(RigidBodyComponent);
        bullet.applyImpulse(new Vec3(0, 2.29, -1 * this.speed));
    }

这里需要注意两点:

  1. 触摸事件是使用cc.systemEvent进行注册的;
  2. 工程中没有代码提示,需要从引擎安装目录中复制cc.d.ts文件到工程中,我是在Mac系统上,可以用下面命令复制:
cp /Applications/CocosCreator3D.app/Contents/Resources/resources/3d/engine/bin/.declarations/cc.d.ts ./

预制体的实例化使用instantiate 与我们在Creator 2D中使用的API完全相同,就不在赘述。这时我们就可以运行预览,通过点击鼠标或触摸屏幕发射子弹了。

摄像机移动

在3D游戏中,通常的做法是使用WSAD四个键进行上下左右的移动,其核心是控制摄像机节点的位置。在我们这个游戏中为了简化游戏操作,我们只控制摄像的 x 和 y 方向的移动:

  • w:y方向增加
  • s:y方向减小
  • a:x方向减小
  • d:x方向增加

创建一个 movement 的脚本用于控制摄像机的移动,下面是组件的设置:

下面重点分析使用键盘控制摄像机移动的相关代码:

//使用 cc.systemEvent.on 注册全局键盘事件
start() {
    cc.systemEvent.on(Node.EventType.KEY_DOWN, this.onKeyDown, this);
    cc.systemEvent.on(Node.EventType.KEY_UP, this.onKeyUp, this);
		... 
}

在按钮下键盘事件 onKeyDown 中标记移动的方向:

onKeyDown(event) {
    cc.log(event);
    let rotation = this.node.eulerAngles;
    let position = this.node.getPosition();
    switch(event.keyCode) {
        case cc.macro.KEY.w:
            this.offset.y = 1;
            break;
        case cc.macro.KEY.s:
            this.offset.y = -1;
            break;
        case cc.macro.KEY.a:
            this.offset.x = -1;
            break;
        case cc.macro.KEY.d:
            this.offset.x = 1;
            break;
    }
}

当按键松开时,将 offset 变量归 0:

onKeyUp() {
    this.offset.x = 0;
    this.offset.y = 0;    
    this.offset.z = 0;    
}

重点是在组件的每帧事件 update 中真正控制摄像机节点的移动:

update (deltaTime: number) { 
    //计算要移动的目标位置
    Vec3.add(this.point, this.node.position, this.offset);
		//插值计算
    Vec3.lerp(this.point, this.node.position, this.point, deltaTime * this.speed);
		//移动节点
    this.node.setPosition(this.point);
}

为了平滑移动,Shawn这里参考了官方Demo案例中的做法,使用 Vec3.lerp 对当前坐标到要移动的坐标进行插值计算。

如何在 Creator3D 中切换模型贴图,超级简单

1效果预览

640?wx_fmt=gif

前两天有伙伴在 QQ 上询问,如何在 Creator 3D 中切换模型贴图。Shawn 之前也没尝试过,不过根据之前 Cocos Creator 的经验以及这几天对 Creator 3D 的学习,简单尝试了一下,方法可行,在此将它分享给大家。2模型材质资源在 Creator 3D 中,一个 3D 物体主要由 ModelComponent 组件渲染,其中包含两大部分: Mesh 和 Material,而模型的纹理就在材质属性上进行控制。在 Creator3D 编辑中,我们可通过图形化拖动的方式修改材质贴图,如下图:

640?wx_fmt=png

上图中,先使用引擎内置的无光照的 Effect,它的选项看起来没那么多,可以减少畏惧感,我们将一 ground 的图片拖动到 test.mtl 材质资源上。然后将 test 材质拖动到 Cube 物体的 ModelComponent 组件上:

640?wx_fmt=jpeg

设置好后你就可以看到 Cube 上的像石头一样的材质表现了。3使用脚本修改材质纹理我这里创建了一个 test.ts 的脚本文件,用于修改材质上的纹理资源,先看下组件属性:

640?wx_fmt=png

注意 3D 物体上的贴图不是Cocos Creator中的 SpriteFrame,而是 Texture2D 类型,下面是 Texture1、Texture2属性定义:

@ccclass("test")export class test extends Component {     @property({type: Texture2D })    texture1: Texture2D = null;     @property(Texture2D)    texture2: Texture2D = null; }

复杂数据类型需要给 @property 输入一个 type 参数,同时下面一行,需要给变量设置为null,不然在属性面板上不显示。纹理资源已经设置好了,如何通过代码访问或修改材质呢?经过Shawn的一阵摸索,发现还是非常简单的,使用材质对像的getProperty、setProperty就可以搞定:

swithcTextue() {    //获取ModelComponent组件    let modelComponent = this.getComponent(ModelComponent);    //获取0号材质    let material = modelComponent.materials[0];    //获取纹理    let texture = material.getProperty('mainTexture');    //设置纹理    material.setProperty('mainTexture', texture === this.texture1 ? this.texture2 : this.texture1);}

material.setProperty的参数是Key和Value,分别对应材质面板上的Key与纹理对象,看下图:

640?wx_fmt=png

用material.setProperty也是同理,如果你是使用的标准Effect,也是用同样的方法:

640?wx_fmt=jpeg

只需要将材质属性中的属性名,首字母小写就可以了!3小结本篇介绍了使用 material.setProperty API 修改材质纹理。最后我们思考一个问题,如果有两个 3D 物理,使用了同一个材质资源,在编辑器中修改材质贴图你会发现两个物理都会同时发生变化,看下图:

640?wx_fmt=gif

如果我们是用代码,在运行时修改了任意一个 3D 物体上的材质属性,另一个 3D 物体的材质会变吗?Shawn做了一下测试,但并没有变,看下面的效果:

640?wx_fmt=gif

之前 Shawn 在想,如果运行时也会变的话,比如生成一桌子的麻将牌,岂不是要为每一纹理创建一个材质资源,现在好像担心多了!

https://blog.csdn.net/6346289/article/details/102752180

【iOS】苹果IAP(内购)中沙盒账号使用注意事项

目标

  • 沙盒账号的正确使用方式
  • 沙盒账号使用的注意事项

1.沙盒账号是什么

iOS应用里面用到了苹果应用内付费(IAP)功能,在项目上线前一定要进行功能测试。测试肯定是需要的,何况这个跟money有关。。。开发完成了之后,如何进行测试呢?难道我测试个内购功能要自己掏钱?就算是公司掏钱,但是苹果要吃掉3成的啊,想想如果是99刀的商品,点下购买的时候心里都有点发慌。。。
苹果当然没这么坑了,测试内购,苹果提供了沙盒账号(也叫沙箱账号)的方式。这个沙箱账号其实是虚拟的AppleID,在开发者账号后台的iTune Connect上配置了之后就能使用沙盒账号测试内购,有了沙盒账号,就能体验一把土豪的感觉了,游戏钻石什么的随便充,反正不用我的钱。

注意:你可以把沙盒账号看做是一个虚拟的AppleID,这个AppleID只有进行内购测试的功能。

2.沙盒账号使用的前提

  • bundleID别搞错了,开发者账号、证书、bundleID要一致
  • 内购的商品ID,价格等相关信息已经录入到开发者后台了(不然那你买什么)
  • 开发者后台已经创建好沙盒测试账号了(下面我们会讲如何创建)
  • 你要有一部真机(iPhone或iPad都行,别用模拟器就好。而且不能是越狱机)
  • 如果你是第一次在这个开发者账号上集成内购功能,请先将iTune Connect上的税务协议都填写好,否则内购时会发现商品ID无效。

税务协议的问题不少童鞋遇到了,可以参考这篇文章http://www.jianshu.com/u/62f0c72a2004

3.沙盒账号创建

登录苹果开发者后台–iTunes Connect–用户和职能–沙箱测试技术员,在这个界面你可以看到当前账号已经创建好的沙盒账号。

沙箱测试技术员管理界面

点击“+”进行创建

创建沙盒账号

新创建的沙盒账号

如图,我创建一个沙盒账号。具体信息:

  • 名字为test1
  • AppleID为jianshutest1@123.com(也就是上面填的电子邮件)
  • App Store地区为中国

注意:

  • 电子邮件不能是别人已经注册过AppleID的邮箱
  • 电子邮箱可以是一个不存在电子邮箱(只要符合格式,随便写)
  • App Store 地区不要乱选。虽然随便哪个地区都可以用来测试(还没上线之前app并没有地区之分),但是在沙盒测试的时候,弹出的购买提示框会根据当前AppleID(沙盒账号)的地区显示语言的。

4.沙盒账号使用流程

  • 1.在iPhone上安装测试包(必须是adhoc签名证书或者develop签名证书打的包,不能是从App Store上下载的)
  • 2.退出iPhone的App Store账号(因为我们需要使用沙盒账号登录)。
    • 操作方法一:打开App Store应用首页滑到最下方–选中AppleID–注销
    • 操作方法二:设置–iTunes Store与App Store–选中AppleID–注销

这里只需要退出账号,退出之后,不需要在这里登录沙盒账号,因为你压根就登录不了。之前已经说过了,沙盒账号是一个假的AppleID账号,不能直接登录的。如果强行登陆,会出现以下报错提示:

使用沙盒账号直接登录报错提示

  • 3.在测试包里面购买商品,系统会让你进行登录,这里我们点击“使用现有的AppleID”就可以输入刚才创建好的沙盒测试账号进行登录了。

点击购买商品后出现登录窗口

输入沙盒账号密码进行登录

  • 4.输入账号之后,有可能会出现如下提示,点击确定之后会跳转到App Store,导致这次购买失败。没关系,我们再次回到测试包,然后购买商品就好

跳转到App Store跳转店面的提示

出现提示的原因:因为AppleID是分地区的。之前我们创建沙盒账号的时候就看到了,需要选择地区。App Store也是分地区的,对应的AppleID只能在App Store对应的地区进行下载和购买东西。我们刚才创建的jianshutest1@123.com这个账号的地区是中国,所以只能在中国店面登录。由于我之前的登录的账号越南的,所以此时AppStore店面是越南店面。所以我们这次登录,系统会跳转到AppStore应用将店面切换到中国。另外,App Store应用切换地区的时候,会报【Your request produced an error】。这个不需要管。

  • 5.点击购买商品之后,成功的话会出现相应提示。

商品内容和价格展示窗口

备注:我们在iTunes Connect上创建商品了之后,除了需要填商品ID,商品名称,商品描述,价格等之外,还要上传一张图片,图片就是上面这个界面。

购买成功提示

沙盒账号注意事项

  • BudleID,证书,商品ID等内容一致,才能进行接下来的储值测试(BundleID都不对,还玩什么)
  • 测试设备需要使用不越狱的真机(越狱机不能进行沙盒储值,模拟器也不能进行沙盒储值)
  • 沙盒账号是不能直接在App Store进行登录的,只能在点击了购买商品之后,在弹出的登录框进行登录。
  • 真实的AppleID不能在adhoc证书和develop证书打出来的包进行沙盒储值测试,所以在沙盒测试之前,需要退出真实的AppleID账号
  • 从App Store上面下载的包不能使用沙盒账号进行储值

关于证书的问题:
1.使用develop签名证书和adhoc签名证书打的ipa包,我把他们叫做测试包,测试包只能使用沙盒账号进行储值,不能使用真实的AppleID进行储值
2.从App Store应用下载的包,我把他们叫做线上包,线上包只能使用真实的AppleID进行储值,不能使用沙盒账号进行储值

另外唠叨一下:
楼主平常上传包的时候是打包了ipa包之后,使用Xcode里面的Application Loader应用上传ipa包的。
虽然很多人上传包使用的是appstore的签名证书,但是,其实使用adhoc的证书打包的ipa包也是可以正常上传并且送审上线的。我平常就是用adhoc的证书打包成ipa包,给测试妹子测试,测试完直接用这个包上传送审了。嘿嘿。
2020.06.28更新:最近苹果App Store Connect改版,不能使用adhoc描述证书的包送审了,真是个悲伤的故事。。

作者:谦言忘语
链接:https://www.jianshu.com/p/1ef61a785508
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

游戏策划的软件与工具

本文修改自前公司的一份交接文档,分享了工作中一些常用的软件。


Axure

界面示意图/流程图制作软件

  • 大前提:Windows系统、无法直连外网
    • Mac系统的话,sketch、principle之类的选择太多了
    • 如果可以直连外网,还有墨刀之类的在线编辑工具可选
  • 可以自定义控件库
  • 一般软件里自带的控件都是基本的web控件或app控件,而游戏里常用的界面元素要远多于这些基础控件,因此提前制作一套适合自己游戏的自定义控件可以在之后的工作中节省不少时间,还能保持统一性。
    自定义控件
  • 可以创建交互效果、并且便于分享
  • 理论上可以制作各种复杂的交互效果、高保真原型,但是从时间投入考虑性价比不高,因此一般我只会创建「点击 – 跳转页面」这一种事件,来简单模拟整个系统的操作流程
  • Axure生成的原型都是HTML网页,系统自带的IE就能打开
  • 作为流程图软件时
    • 如果是界面关系流程图,可以关联已创建的界面,生成HTML网页后,点击流程图可以直接跳到对应的界面,便于讲解流程时的细节展开。
    • 如果是一般操作逻辑流程图,axure并没有明显的优点,但也没太大的缺点,中规中矩

SublimeText

万能编辑器,所有的配置文件都推荐用这个软件编辑(xls之类二进制文件除外)

  • 鼠标中键可以直接多行选择,非常实用!
    中键可以直接多行选择
  • 针对整个目录的全局搜索/替换,速度极快。
  • SublimeText的强大远不止于此,这只是编辑配置文件时最实用的两点 。

XMLSpy

专业的XML编辑软件。

  • 用这个软件主要就为了一点:
  • 在网格模式下,可以直接把Excel里计算好的成百上千行数据粘贴过去,大大提升效率

可以直接粘贴Excel数据

  • 当然这个软件也有很大的缺点:运行慢、占内存。所以要配合SublimeText来使用,XMLSpy主要是用来粘贴大量数据时用的,轻量的编辑还是采用SublimeText更高效。
  • 不要再用用UltraEdit、Notepad++ 甚至记事本来编辑XML了!

MindManger

脑图软件

  • 我见过用Excel、Word、Visio来画脑图的(确切的说不是脑图,只是想法收集整理的文档)
  • 然而,还是用专门的脑图软件好一些

Q-Dir

资源管理器窗口布局软件

  • 配置一个系统要涉及好多个目录:设定表、客户端配置、服务端配置、美术资源等等……
  • 这个软件可以在一个窗口中分多栏、同时打开多个目录(最多分四栏)
    窗口分栏布局
  • 还可以保存分栏的布局模式和对应打开的目录,以便之后编辑。
  • 我给那些配置复杂的系统,各保存设置了一套布局摆在桌面上,再也不用改一个系统打开4个资源管理器窗口、一层一层找目录了。

Bulk Rename Utility

批量重命名文件的软件

  • 能用软件解决的事情,我都不想人工操作;
  • 就算不会用正则表达式,光是基础的替换、加前后缀都足以节省很多无意义的手工劳动。
    批量重命名

PNGOUT

png图片无损压缩

  • PS直接存保存的png图片经常比容量较大,用工具压缩一下可以节省很多容量。
  • 这类图片压缩工具有很多,PNGOUT未必是最出色的一个,但胜在操作简单。
  • 我一般会在每个大版本前夜,把所有图标都扔进去压一遍。

png图片压缩

Everything

文件搜索

那么多文档素材,就算目录结构再清晰也难免有找不到某个文件的时候,
而Windows系统自身的搜索实在太慢,用这个软件试一下吧,搜索速度极速提升。

KKCapture

视频录制软件

之前研究其他游戏(页游)的引导流程时,用这个录了几十个游戏的视频,
不过后来做手游后感觉最好是能用Mac的QuickTime直接录屏——60fps高清无码。

BeyondCompare

文件对比软件

  • 我们一定会遇到需要比对一个文件的不同版本、检查配置错误的时候。
  • 这个软件,绝对比SVN、CVS自带比对功能好用。
  • 还有一个连Git都没有的最大优点——可以对比Excel文件,绝对神器!
    可以对比Excel文件

Sothink SWF Decompiler

SWF反编译软件

  • 以前做页游项目时,总觉得我们美术做的动画素材容量太大,因此用这个软件去破解了其他游戏的素材,寻找动画制作、压缩方面的技巧,还算有点帮助。
  • 不过现在flash都快被淘汰了,以后可能用不到了。

FontCreatorSetup

字体编辑软件

  • 美术选用了一个字体专门用于等级、数值等,因此只需要用到英文字母、数字和少量标-点。
  • 由于这是一个中文字体,ttf文件有10MB多。
  • 这个软件可以编辑字体文件的字库,删除不需要的文字,达到压缩字体文件的目的。
  • 最终处理过后的字体文件从10MB压到了几十KB。

字体编辑

格式工厂

视频音频格式转换软件

  • 宣传视频的原始输出太大,需要转个格式压缩一下……
  • Cocos引擎下音频都需要转成MP3格式……
  • 一个团队里总要有人做这些事情。

虽然格式工厂的转换速度不快、有时还会出错,只是胜在使用起来简单粗暴,如需更专业一些转码工具可用MediaCoder、AudioCoder这类。

GoldWave

音频编辑软件

  • 网上扒来的背景音乐音量不一致,用这个调整一下音量
    • 这个要特殊申明一下,我们游戏正式上线之前音乐音效都会外包。只是测试体验期间需要先有素材来代替,同时还能充当外包需求的「效果图」
  • 再加一下渐入渐出,让音乐的出现不会很突兀
  • 这种级别的音频编辑并不需要什么专业的音乐素养,都是简单的软件操作,以淡入淡出为例:
    • 选择一段音频 – 点淡入按钮 – 选个预设的淡入模式 – 确定

音频编辑

Chrome

浏览器

  • 主要目的是为了文章题图的矩阵布局,增加一个图标凑数用。
  • 例行黑百度,我也不算小白用户了,安装软件时都会自己检查各种不起眼的勾选项,但Chrome首页居然一度被篡改成了百度系的hao123,真是防不胜防。FuckBaidu!
  • 页游的一些资源加载问题可以通过在F12的调试窗口里初步检查,判断问题属于程序还是运维部门。
  • 当然我也确实见过一些新人依然是用IE的,还是要介绍一下世界上存在Chrome这么个浏览器。

其他

Adobe大家族、Office大家族

  • Adobe系列,当你想点美术系天赋时,自然会用到其中一些。
    不过说实话,对于策划来说,那些基本的功能,尤其是简单的批量操作,美图秀秀确实会比PS的脚本更方便。
    不考虑逼格问题的话,还是可以考虑装一个美图秀秀(我装了,没截在图里而已)。
  • Office系列就不介绍了,只可能不熟练,不可能不知道。
    只提醒一点:多研究一下Excel的函数公式,能用公式填表就不要手填

最后

  • 有些新人总是会认为:这个不是应该美术做?那个不是应该程序做?
  • 我的观点是:作为什么都不会的策划,只有什么都会才能活下去。

作者:UXplayer
链接:https://www.jianshu.com/p/ceddde705933
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。