cocos2dx 3.x重力感应延时BUG解决方案,同样适用于quick-cocos2dx,cocos2dx-js

cocos2dx 3.X版本的重力感应经过一定时间后会非常不灵敏,网上的许多方案是修改帧频,这种解决方案是错误的,官方已经提供了解决方案,如下:

修改cocos2dx目录下的cocos/platform/ios/CCDevice-ios.mm文件

在头部找个合适的地方添加如下常量:

#define SENSOR_DELAY_GAME 0.02

找到

- (id) init

{

    if( (self = [super init]) ) {

        _acceleration = new cocos2d::Acceleration();

        _motionManager = [[CMMotionManager alloc] init];

    }

    return self;

}

修改为:

- (id) init

{

    if( (self = [super init]) ) {

        _acceleration = new cocos2d::Acceleration();

        _motionManager = [[CMMotionManager alloc] init];

        _motionManager.accelerometerUpdateInterval = SENSOR_DELAY_GAME;

    }

    return self;

}

就是在init函数中添加

        _motionManager.accelerometerUpdateInterval = SENSOR_DELAY_GAME;

参考链接:

https://github.com/cocos2d/cocos2d-x/commit/6f2819ec5a3a73efdc834274f9587f92f90949af

php在游戏开发中的应用

在写下这个的题目的时候,我深刻的意识到这个题目不是那么好写,泛泛而谈就容易失去意义,但是如果要把php在游戏开发应用的细节都加以详细的描述,则可以写成一本书。签于此,我就在本文中就简单的阐述我在webgame职业生涯里进化过程。
第一款游戏:玄幻题材。这款游戏前端是一款纯html的页游。技术选用:php + mysql,php框架选用CI。游戏的开发周期约10个月,在开发制作过程中除了表现上很大的困惑我们,其他的技术上并没有太大的困惑。游戏出来后,由于种种原因,没有大规模的运营。因此我也没有这款游戏的负载数据。
第二款游戏:武侠题材。这款游戏前端是用flash,后端用的php + mysql,php框架仍然延用CI,和flash的通讯采用短连接,协议采用amf3。这款游戏历经10个月出炉后,被企鹅独代。这款游戏由于大量的数据采用以服务端数据为准,导致了很多数据需要更新时不得不从新请求,从而导致了单服的负载偏低。这款游戏在研发过程中,最大的问题就是负载偏低。
第三款游戏:武侠题材。这款游戏前端采用flash,后端用的仍然是php + mysql,php框架换成yaf,和flash的通讯采用短连接,协议仍然采用amf3,游戏的开发周期大概8个月。我们在研发这款游戏的时候,吸取了第二款游戏教训,大量的数据缓存在flash,大大降低了请求数量,因此本款游戏的负载提升很可观,几乎是第二款游戏三倍(当然也可以说我们第二款选用有多烂:))。这款游戏的前后端架构,至目前为止还是适用市面上大部分游戏。
第四款游戏:武侠题材。这款游戏前端采用flash,后端使用的是php + redis,php框架保留第三款yaf,前后端的通讯采用socket,协议采用amf3,这款游戏研发周期大概8个月。这款游戏之所以采用弃用短连接采用长连接很重要的原因在于现在游戏的玩法很多是强交互,同时长连接能提供的游戏的体验比短连接好上百倍。由于某些原因,这游戏目前还没有大规模推广。
第五款游戏:足球题材。这款游戏的架构和第四款是一样的,前端采用flash,后端采用php + redis,php框架保留yaf,前后端的通讯采用socket,协议采用amf3,这款游戏的研发周期6个左右。这款游戏经实测同时在线1400,一台8核8G的物理机妥妥的支撑住(由于没有再往上的同时在线人数,因此没有测到最高的能支撑多少)。由此可见php在做webgame的应用中还是非常值得选用。
我们之所以在webgame每个产品都一直采用php很重要的原因是:php能满足游戏开发中的各各功能需要,而且php开发过程中相对于其他语言有的优势。
签于之前的项目经验,我们对php在游戏研发的技能做了如下的测评和建议:
技术选用:短连接,php + mysql
容易上手:★★★★★
负载能力:★★✩✩✩
业务能力:★★✩✩✩
推荐程度:★✩✩✩✩

技术选用:短连接,php + redis
容易上手:★★★★✩
负载能力:★★★★✩
业务能力:★★✩✩✩
推荐程度:★★★✩✩

技术选用:长连接,php + mysql
容易上手:★★★✩✩
负载能力:★★✩✩✩
业务能力:★★★✩✩
推荐程度:★★✩✩✩

技术选用:长连接,php + redis
容易上手:★★✩✩✩
负载能力:★★★★✩
业务能力:★★★★✩
推荐程度:★★★★★

在结束这篇文章之前,如果有希望通过长连接做游戏开发的phper可以去了解一下如下的项目:swoole,zphp,workerman。
欢迎大家加入:php游戏开发群(321489181)

Nginx+php-fpm遇到Access denied解决方案

1. 检查php-fpm.conf文件中的security.limit_extensions是否配置正确。这里应该为不配置或者配置为正确的扩展名,例如.php

;security.limit_extensions = .php

2. 检查nginx配置中的SCRIPT_FILENAME是否正确

3. 检查nginx关于php的配置是否正常,要修改官方提供的:

location ~ \.php$ {
}

修改为:

location ~ ^(?:(?<!\.php).)+\.php($|/.*)
{
}

以上配置由cfc4n大神提供

4. 修改php.ini中的cgi.fix_pathinfo值为1

cgi.fix_pathinfo = 1

该配置有安全隐患,需要设置成0,即

cgi.fix_pathinfo = 0

参考文献:

http://stackoverflow.com/questions/23390531/access-denied-403-for-php-files-with-nginx-php-fpm

nginx+trac多项目配置(trac用fast-cgi模式)

安装就不废话了,网上非常多。这里主要介绍一下nginx+trac使用fast-cgi模式下的超懒人配置。基本上使用系统默认,不用做大的调整。

nginx配置如下:

server {
    listen 80;
    server_name 这里是域名;

    location / {
        #这里的端口要和tracd配置的一致
        fastcgi_pass localhost:8000;
        include fastcgi_params;
        fastcgi_param  SCRIPT_NAME        "";
        fastcgi_param  PATH_INFO          $fastcgi_script_name;
    }

    access_log 日志位置;
}

tracd启动命令:

#这里的/path/to为项目的上一级目录,这样配置后支持多项目
#--protocal=fcgi为使用fast-cgi模式
#--env-parent-dir为项目的父目录。例如项目project1位置为/path/to/project1
#--auth为用户登录配置
#-d表示用守护进程启动
tracd --protocol=fcgi --env-parent-dir=/path/to/ -d --auth=*,/path/to/passwd,trac

 

 

 

 

php5.3.* 5.4.* 编译出现checking size of char… configure: error: cannot compute sizeof (char)时的正确解决方案

php5.3.* 5.4.* 编译出现checking size of char… configure: error: cannot compute sizeof (char)错误时,网上现在流行的解决版本是去掉disable-rpath,正确的解决方案是由于动态动态连接库的地址不对。在执行configure前执行下面的语句就可以通过:

export LD_LIBRARY_PATH=/lib/:/usr/lib/:/usr/local/lib

 

php版本的迷宫生成算法及A*寻路算法

php版本的迷宫生成算法及A*寻路算法

迷宫生成算法

采用树的深度遍历算法生活

A*寻路算法

这个就不介绍了,大家懂的

文件说明

  • Maze.php 生成迷宫主类
  • AStar.php A*寻路算法
  • 其他文件是演示支持的

使用演示

#在web根目录下执行:
git clone https://github.com/recoye/php-maze.git

#在浏览器中查看:

http://localhost/php-maze/index.php

在线演示

php版本的迷宫生成算法及A*寻路算法在线演示

参考

A*算法参考以下文献:

迷宫生成算法

换皮项目SVN管理方案–不同svn合并

最近公司有一个项目要换皮,因此涉及到了两个svn合并。

使用背景:
1.换皮项目拆出分支以后已经有比较多的更新
2.原来的项目新增了不少内容

由于用了两个svn管理,要直接合并两个svn是不太可能的。因此只能把其中一个svn导出来放到另外一个svn中合并。

合并方案(A要往B上合,合成B):

1.拆分要合并的分支(在B上拆分支),记住分支的版本必须为指定1的版本,不能是当前的版本
2.从A中导出最新版本,复制到B的分支上,提交SVN
3.从B的分支上往B主干上合

使用rsync做腾讯云主机同步代码

众所周知接入腾讯云主机的IP只提供内网IP,因此很多人觉得就不能用rsync往云主机上同步。本文将主要介绍rsync通过ssh隧道同步代码。

首先我们了解一下腾讯云主机的登录方式,腾讯的云主机的ssh登录是通过http代理登录的,登录方式官方的wiki非常的详细(传送门:服务器登录说明)。官方推荐的代理工具corkscrew,本人在centos5.6和mac上使用时都不稳定,经常会发包发着发着就傻了。因此,本人推荐使用connect做代理。connect的使用方法的方法参考:http://bolg.malu.me/html/2011/1809.html

在保证能使用ssh登录腾讯云主机以后,使用rsync同步的事情就简单了。即使用下面的命令就可以了,注意红色字部分:

  rsync -avl -e “ssh -p 36000 -q -l appid” 源文件地址 云主机内网ip:目标地址

 

写了一个VIM的配置文件

自己整的一个VIM脚本,共享以及备用

"==========================================================
" Description : vimrc for gvim
" Last update : 2013/3/26
" Version : 1.0
"
" Homepage : http://www.recoye.com
" Github : https://github.com/recoye/vimrc
" Email : mail#recoye.com
"
" enjoy:)
"
" =========================================================

" 关闭vi兼容模式
set nocompatible

"风格
colorscheme desert
if has("win32") 
    set guifont=Courier\ New\ 12
else
    set guifont=Monaco:h12
endif

"设置不保存备份
set nobackup

"语法高亮
syntax on

"缩进设置
set tabstop=4
set softtabstop=4
set shiftwidth=4
set autoindent
set expandtab

" 自动缩进
set smartindent

"显示行号
set number

" 搜索
set ignorecase smartcase "忽略大小写
set incsearch  "输入搜索内容时就显示搜索结果
set hlsearch "高亮显示搜索结果

" 错误提示
set noerrorbells "关闭错误提示
set novisualbell "关闭使用可视代替呼叫
set t_vb=""  "置空错误提示

" 状态栏
set cmdheight=2 "设置命令行为两行
set laststatus=2 "设置状态栏数
set ruler "标尺

" 工具栏
set guioptions-=T "隐藏工具栏
"set guioptions-=m "隐藏菜单栏

" 自动切换目录
set autochdir

" 突出显示当前行
set cursorline

" 不在设定在插入状态无法用退格和delete删除回车符
set backspace=indent,eol,start

"设置字符集
if has("multi_byte")
    " UTF-8编码
    set encoding=utf-8
    set fileencoding=utf-8
    set termencoding=utf-8
    set formatoptions+=mM
    set fencs=utf-8,gbk

    if has("win32")
        source $VIMRUNTIME/delmenu.vim
        source $VIMRUNTIME/menu.vim
        language message zh_CN.utf-8
    endif

endif

" 共享剪切板
set clipboard+=unnamed

" 全屏
if has("win32")
    au GUIEnter * simalt ~x "自动最大化
endif

" 插件
filetype on "检测文件类型
filetype plugin on "载入文件类型插件

" 允许未保存时切换缓冲区
set hidden

" 自动填充
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap " ""<ESC>i
inoremap ' ''<ESC>i
inoremap { {}<ESC>i
inoremap {<CR> {<CR>}<ESC>O
inoremap } <c-r>=ClosePair('}')<CR>
inoremap ) <c-r>=ClosePair(')')<CR>
inoremap ] <c-r>=ClosePair(']')<CR>

function ClosePair(char)
    if getline('.')[col('.')-1] == a:char
        return "\<Right>"
    else 
        return a:char
    end if
endfunction

 

Hello world!

想了想,还是用这种最符合身份的打招呼方式吧:)

<?php
echo "hello world!"
#include <stdio.h>
int main(void){
    printf("hello world!");
    return 0;
}
#!/bin/bash
echo "hello world!"