从 Actionscript 1.0 迁移到 Actionscript 3.0

从 Actionscript 1.0 迁移到 Actionscript 3.0

Migrate Actionscript 1.0 to Actionscript 3.0

这并不是一篇好几年前的老文章,而是我去年10月份在之乎上的一个回答,今天有知友回复让我看到这篇,于是把她转到自己的博客上来。

原文见这里:AS1.0/2.0 改写成 AS3.0 难吗?一款中型的flash游戏改写,大概需要多少时间和成本?

做为一个从AS1一路写到AS3的程序员,我来回答一下。

  • 首先需要声明的是,关于难不难,每个人有自己的判断标准,这个我不会回答。
  • 其次需要声明的是,我也无法回答大概需要多少时间和成本,但看完我的回答后,你应该能自己计算出来。

AS从1到2,其实没有什么本质的改变,AS2.0只是加入了一个似是而非的class关键字而已,最终编译成的字节码,还是一样的。

而AS3就完全不同,从FlashPlayer9(第一个支持AS3的Player)开始,FlashPlayer就内置了2套AVM虚拟机,AVM1针对AS1+2,AVM2针对AS3。AS3甚至专门加了一个类AVM1Movie来处理AS1+2的MC,看这个: AVM1Movie – Adobe ActionScript? 3 (AS3 ) API 参考 。我认为,即使说AS3是另外一门语言也不为过。 继续阅读

在 cocos2d-x 中使用 libcurl 实现上传文件功能(附quick-cocos2d-x封装)

在 cocos2d-x 中使用 libcurl 实现上传文件功能(附quick-cocos2d-x封装)

Upload a file use libcurl in cocos2d-x.

本文基于 cocos2d-x 2.2.2 和 quick-cocos2d-x zrong修改版 3be9b8

目前做的项目中需要实现b截图分享功能,我的设计思路是使用 CCRenderTexture 来截图,并通过HTTP上传到截图分享服务器。

通过查看 cocos2d-x 源码,我发现 cocos2d-x 封装了一个 CCHttpClient 类,用于调用 libcurl 实现HTTP协议通信。不过并没有实现文件上传功能。

但 quick-cocos2d-x 不知道什么原因,删除了这个 CHttpClient 实现,而改用了 CCHTTPRequest 类,内部封装的依然是 libcurl ,但也依然没有实现文件上传功能。

既然都是封装 libcurl ,我们完全完全为现有的类扩展上传文件功能。在本文中,我基于 quick-cocos2d-x 的 CCHTTPRequest 类进行了扩展。cocos2d-x 如果需要扩展,方法也类似。 继续阅读

在ITX小机箱中替换CPU风扇

在ITX小机箱中替换CPU风扇

Replace CPU fan in ITX computer case.

抛弃旧情人

今年情人节那天(2014-02-14),我把用了十几年的老机箱送人,换成了 酷冷至尊(CoolerMaster)小魔方 。具体配置为:

  • AMD A10 5800K
  • Team Vulcan DDR3 2400 4GBX2
  • ASRock FM2A85X-ITX

硬盘和电源就沿用原来的。特别说一下10年前买的 航嘉 磐石355 电源,一直无故障用到现在,果然是坚如磐石啊 :-)

HuntKey 355

AMD牌飞机发动机 继续阅读

如何升级Ubuntu中的OpenSSL库

如何升级Ubuntu中的OpenSSL库

How to upgrade OpenSSL on Ubuntu?

4月8日爆出的 heartbleed 漏洞要求把 OpenSSL 升级到 1.0.1g 版本。

关于这个漏洞的技术说明,可以看这里: 关于OpenSSL“心脏出血”漏洞的分析

Heartbleed test 网站,可以测试自己的网站有没有这个漏洞。

我最担心的,是在升级 OpenSSL 的过程中,远程 SSH 无法连线。

OSChinaSegmentfault 上询问后,得知这种情况不会发生。

另外,可以采用比较保险的方法:

保险起见,你在现有的ssh连接上输入命令升级openssl,然后重启服务。不要断开SSH连接。然后新开一个SSH会话,确认一切正常后再断开旧的SSH连接。

升级的方法,参照这几篇文章吧,我就懒得写了:

在手机游戏开发中如何选择图像素材格式?

在手机游戏开发中如何选择图像素材格式?

How to choose the picture texture format in the game develop?

这是我在知乎上的一个回答,这里是原文

回答的前提是:使用OpenGL来渲染。

分几个点来回答。

1. RGBA4444真的比RGBA8888占用的RAM要少

其实这里说的RAM,是指的显存而非内存。OpenGL支持以这几种形式来使用纹理资源(via http://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml):

  • GL_UNSIGNED_BYTE(RGBA8888或RGBA888)
  • GL_UNSIGNED_SHORT_5_6_5
  • GL_UNSIGNED_SHORT_4_4_4_4
  • GL_UNSIGNED_SHORT_5_5_5_1

在程序将图片载入系统内存后,会根据你选择的形式(RGBA8888/RGB565 etc.)对其做一些处理(怎么处理后面说),然后就将这些纹理上传到显卡的显存,之后会把这些图片占用的内存删除掉。 继续阅读

在cocos2d-x中实现橡皮擦功能

在cocos2d-x中实现橡皮擦功能

How to make an eraser in cocos2d-x?

cocos2d-x 是使用 OpenGL ES 来渲染的,实现橡皮擦,需要一点点 OpenGL 知识。

/* 下面是可以跳过不看的废话。

是的,不需要 OpenGL ,我们也能使用 cocos2d-x 制作出游戏。至少我接触过的几个团队都是这么干的,有的团队中甚至无人了解 C++。

但是,在我学习 cocos2d-x 的这几个月里,我发现不学习 OpenGL ES 对我来说是无法想象的。在看源码的时候,你不能碰到 OpenGL 就无视它们,对程序员来说这是罪过。

这不难,Trust me.

废话结束 */

依赖

本文基于 cocos2d-x 2.2.2

效果截图

eraser

原理

先将要被擦除的像素渲染到 FrameBuffer 中,然后使用 Alpha 为 0 的像素块与已有像素做混合,将已有的像素替换成 Alpha 为 0 的像素即可完成擦除。 继续阅读

真正的程序员应该能自己解决问题

真正的程序员应该能自己解决问题

A programmer may solve problems on their own.

刚巧我写了这篇 优秀的程序员和一般的程序员差别在哪? ,就看到了这篇 quick 论坛上的讨论, 原文在这里

我征得了原作者同意,转载在这里。

Xpol Wan

大家好,

我来发点牢骚。

最近老是看到有人发错误信息的截图问怎么办。虽然论坛里面没有说不能问这样的问题。

但是我个人的意思是,这些真的是属于你自己的鸡毛蒜皮的小问题,不必到这里来问,这些问题多数都不属于quick-x。

以下是我的一些建议: 继续阅读

quick-cocos2d-x中的绘图API

quick-cocos2d-x中的绘图API

quick-cocos2d-x 提供的绘图API的相关C++文件位于 draw_nodes 文件夹中,有这样几个:

CCDrawingPrimitives

提供 ccDraw* 开头的全局方法,可用来绘制游戏开发中调试用的图形。cocos2d-x开发组在该功能源码前使用了这样的说明:

LEGACY FUNCTIONS
USE CCDrawNode instead

在ccDrawCubicBezier下面还有这样的说明: 继续阅读

程序员(无证)