小塌客

石头的博客

Google HTML5 web font

Goole HTML5 Web Font

HTML5支持自定义字体,Google专门开设了一个服务开发者可以上传和共享自己的字体,使用方法很简单:

 

1) 查看字体列表,选择你要使用的字体

 

2) 然后在header中加入CSS调用,比如:

<link href='http://fonts.googleapis.com/css?family=Ubuntu' rel='stylesheet' type='text/css'>

 

3) 最后就是使用了:

h1 {font-family: Ubuntu}

或者在Canvas中使用

var context = document.getElementById("canvas").getContext("2d");

context.font = "bold 12px Ubuntu";

context.fillText("Hello World", 20, 20)

 

HTML5 & Impactjs

HTML5 Powered with Connectivity / Realtime, CSS3 / Styling, Device Access, Graphics, 3D & Effects, Multimedia, Performance & Integration, Semantics, and Offline & Storage

最近一直在看HTML5游戏开发这方面的东西,从小学FC上的超级玛丽 ,魂斗罗一直到现在的全机种制霸(这绝对不是赤果果的炫耀...),shitou的玩龄也有快15年了,虽然一直在做程序开发的东西但从来没接触多游戏开发这方面的内容,个人严重抵触flash,虽然几年前研究过flex,但是还是不想用flex/flash来起步做游戏,最近HTML5已经被各大浏览器厂商推到风口浪尖了,各种支持也越来越完善,尤其是HTML5中的Canvas, Audio标签对游戏开发都是很至关重要的,在没有HTML5之前,web game都是javascript和flash来实现的,现在有了新选择。

 

加之iOS对flash的封杀,所有基于flash的web game都是被悲剧了,而各大厂商(包括移动浏览器)都力挺HTML5,这样用HTML5开发的游戏经过简单的修改(基本上是用户控制方面的,比如鼠标的点击,屏幕触摸等操作)就可以运行在移动平台了。

 

关于游戏引擎/开发库

目前有很多基于JS+Canvas的游戏开发库,大部分都是开源的,不过功能都不是很完善,也有商业的,比如Impactjs,shitou目前就是用的这个引擎,版权费用是99刀,在研究了近两个星期后,简单总结了这个引擎的一些特点:

 

  • 地图完全是基于tile-based
  • 非常适合开发横版滚动卷轴类的游戏,像古董级的超级玛丽,魂斗罗,最近XBLA上的Limbo(地域边缘),Super Meat Boy(超级肉肉哥)这类游戏; 垂直视角的RPG或者SLG战棋类游戏,像塞尔达传说,早期版本的最终幻想3/4(不是NDS上的3D妇科版...),GBA上的火焰文章; 还有横版(或竖版)射击类游戏也可以
  • 对collision detect, tile-based map, sound, music, image animation, mobile support, input, timer都有不错的支持,目前版本不支持isometric类型的地图,还有没有path finding
  • 已经整合了Box2djs
  • 引擎中有一个自带的地图编辑器weltmeister,功能非常强大,适合用来编辑关卡
  • 官方文档非常完善;官方论坛也比较活跃,而且有很多第三方插件可以使用
  • 通过Phonegap可以直接将自己的游戏打包成iOS, Android, WP等上的本地app应用
  • 对游戏元素的鼠标点击事件支持的不好,需要通过hack的方法才能实现

 

总体上impactjs的功能还是很不错的,尤其对于刚接触游戏开发的朋友来说,而且授权价格也还可以接受,感兴趣的同学可以买一个license研究研究,也可以和shitou联系一起研究。

 

ps: 欢迎各位同学来信骚扰,mytake6ATgmailDOTcom

 

在gen_server中spawn新的进程

最近Joe在erlang mail lists中频繁现身,估计是因为许多人对gen_server的使用有很多误解,忍不住出来解救众生的...

其中Joe专门解释了怎样在gen_server中管理新的进程的问题 代码:
foo(X) ->
    gen_server:call(?Mod, {foo, X}).


%% Write a gen_server handle call method like this:

handle_call({foo, X}, From, State) ->
    State1 = func1(X, State),
    State2 = func2(X, State),
    spawn_link(fun() -> do_something(State1, X, From) end),
    {noreply, State2}.

do_something(State, X, From) ->
    Reply = func3(X, State),
    gen_server:reply(From, Reply).
上面的do_something可能是一个time-cost任务,为了不阻塞当前的gen_server进程,可以spawn一个新的进程来专门处理,do_something和当前gen_server进程会并行运行,gen_server会以State2继续运行,并且不会给client返回任何消息,client一直处于等待状态(因为这里是gen_server:call), do_something在处理完毕后会负责给client答复(gen_server:reply)

谷歌穿越搜索...

Google teleport

 

是的,谷歌穿越搜索,谷歌总是和我们这些草根网民走的这么近,其实这个搜索昨天就出来了的说,哥太忙了就忽视了,今天又看了看,发现哥昨天错了,昨天就应该穿越的,哥一直都在期望穿越啊混蛋,我们来穿越吧,对了,穿越前不要忘了热身,我们一起来做"穿越体操":

 

开始穿越 引力场扭曲中~~

 

Superfly - Wildflowers

前段时间在中国购买王上订的Superfly的CD: Wildflowers终于到货了(加运费小300RMB,钱包你怎么了,钱包你醒醒啊..),今年疯狂迷上了Superfly, 感觉她的嗓音很特别,

 

知道她还是因为去年年底时PSP上的游戏寄生前夜<第三次生日>的主题曲Eyes on me(没错, 和Final Fantasy VIII的主题曲同名,那首是由王菲唱的)就是她唱的,当时哥的抵抗力瞬间降为0, 她的声音初听给人特别有力和充满磁性,然后你又会觉得很温柔....之前在网上听了她的Wildflowers专辑,随后就觉得一定要收藏正版,下面是用手机拍的到货的CD:

 

http://www.ccok.me/photo/image/78/medium/___1.jpg

封面

 

http://www.ccok.me/photo/image/79/medium/___2.jpg

让我小心的打开..

 

http://www.ccok.me/photo/image/80/medium/___3.jpg

封底内

 

http://www.ccok.me/photo/image/81/medium/___4.jpg

封底外

 

 

继续凸墙 for Mac OS

之前已经说过怎样用ssh tunnel来凸墙了, shitou一直用的Mac, 每次都需要使用时执行一次ssh的命令,然后就是进System Preferences中开启网络的sock代理,不用时还得kill掉ssh tunnel的进程,感觉还是麻烦的说,程序员不都是越来越懒惰的吗,所以就写了下面这个懒惰脚本,

用这个脚本的前提是:

1) 必须在Mac上
2) 必须以sudo的方式运行
3) 必须事先已经设置好socks代理的server ip和端口号,因为这个懒惰脚本不会帮你填代理的ip和端口号,你只需要设置一次就可以了,以后永远不用动了,设置socks代理的ip和端口的方法是System Preferences -> Network -> Advanced... -> Proxies -> SOCKS Proxy, 然后把ip和端口添进去就行了,下面脚本中会开启代理是127.0.0.1:8082, 我知道你也懒得改了,就按这个填吧...
4) 最后就是你最好设置好ssh使用无密码密钥登陆,不然每次都要敲ssh密码,要懒就懒极致...

好了,懒惰脚本在这里:
#!/bin/bash

#Parameters
USER=root
HOST=

#Configuration file
#Please check if the file exists
CONFIG_FILE=/Library/Preferences/SystemConfiguration/preferences.plist

SWITCH=0
case $1 in
  0|1)
    SWITCH=$1

    LINE=`grep -n 'SOCKSEnable' $CONFIG_FILE  | cut -d: -f1`
    sudo awk '{if(NR == "'$LINE'" + 1)print "'$SWITCH'";else print $0}' $CONFIG_FILE > $CONFIG_FILE.tmp
   sudo mv $CONFIG_FILE $CONFIG_FILE.bak
    sudo mv $CONFIG_FILE.tmp $CONFIG_FILE
    echo "Modify configuration file successfully!"

    if [[ $SWITCH == 1 ]]; then
      echo "*************"
      echo "Starting ssh tunnel.."
      ssh -Nf -D 0.0.0.0:8082  $USER@$HOST
      echo "Done!"
      echo "You are outsite the GFW now:-)"
    else
      echo "Stopping ssh tunnel.."
      kill `ps aux | grep "ssh -Nf" | grep -v grep | awk '{print $2}'` > /dev/null
      echo "You are insite the GFW now:-("
    fi
    ;;
  *)
    echo "need 0|1, exit"
    exit 1
esac

使用

首先你得保存下来,加入脚本名字是fuucck_gfw.sh, 然后填下USER和HOST两个变量,就是ssh登陆的用户名和主机,然后就完了.
sudo ./fuucck_gfw.sh 1
1是开启,0是关闭,执行完就OK了.

最后, 上面的脚本还不是最完善的, 原因在于, 每次修改完系统的Network配置后会重新载入当前的网络配置, 但是shitou怎么找都没找到在Mac中怎样用命令来reload网络配置的, 所以在你执行完上面的脚本后, 还需要在System Preferences中打开Proxies, 然后做一次SOCKS Proxy的配置改变, 就是点两下前面的单选框,然后点OK, Apply就行了, 有知道怎么在Mac中通过命令来reload网络配置的同学可以告诉我, 这样这个脚本就完善了, 真正的一键凸墙凹墙...