??xml version="1.0" encoding="utf-8" standalone="yes"?>97久久久精品综合88久久,三级片免费观看久久,天天综合久久久网http://www.shnenglu.com/wc250en007/风轻云Ezh-cnTue, 06 May 2025 23:15:49 GMTTue, 06 May 2025 23:15:49 GMT60Synergy 一套键鼠同时控制多台电(sh)?开源免费,支持Win/Mac/Linux)(?http://www.shnenglu.com/wc250en007/archive/2012/11/14/195194.html风轻云E风轻云EWed, 14 Nov 2012 07:02:00 GMThttp://www.shnenglu.com/wc250en007/archive/2012/11/14/195194.htmlhttp://www.shnenglu.com/wc250en007/comments/195194.htmlhttp://www.shnenglu.com/wc250en007/archive/2012/11/14/195194.html#Feedback0http://www.shnenglu.com/wc250en007/comments/commentRss/195194.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/195194.html惛_很多人都拥有多台?sh)脑Q譬如台式机+W记?/a>Q很多时候我们都?x)同时打开它们工作。可是你有没发现Q如果桌子上摆放着多台?sh)脑多?a target="_blank" style="text-decoration: initial; color: #0086e3;">键盘鼠标Q不停来回切换用是否很累呢Q如果说现在可以只用一套键鼠,p同时控制你全部的?sh)脑Q你?x)否兴奋Q?/p>

Synergy 正是为此而生的好工具Q?strong>它可以让你的多台?sh)?/span>׃n一套键鼠,甚至q可以共享剪贴板Q?/span>而你只需动动鼠标Q指针就可以L地在各台?sh)脑屏幕之间来回I梭Q就像一台电(sh)脑用多个显C器一栗而且 Synergy 完全免费开源,q跨q_支持 Win/Mac/LinuxQ相当给力! 使用之后Q工?a target="_blank" style="text-decoration: initial; color: #0086e3;">效率提高Q腿不酸C|桌面也干净?jin),l对是绝世神器啊Q?/p>

Synergy 的用方法:(x)

我的桌子上有1个台式机 (Windows7) ??nbsp;MacBook Pro W记?(Mac OSX)Q偶?dng)还会(x)用到另外一台笔记本 (Linux/Win双系l? 同时协同工作Q这时候桌子上的键鼠们开始打架了(jin)Q?个鼠?2个键盘,q要不断Udw体去迁q(sh)脑的位置。这时候就可以Q或者说是非帔R?Synergy 来解放这U痛苦了(jin)QOKQ开始吧……

Synergy

Synergy 有一个用前提,是你的应用环境中的多台?sh)脑需要在同一局域网内。譬如说Q家里用一个\由器׃n上网的,其下的全部电(sh)脑一般就是在同一局域网内。关于局域网的知识就不再在此阐述?jin),估计大家都知道怎么l网吧?/p>

虽然 Synergy 的配|和使用其实q不难,但目前它只有英文界面Q而且界面我个人感觉做得不是很易用Q可能新手咋看上LҎ(gu)Q我大概说说它是怎么个运作的吧。当?dng)q事也不能说得太l,不然大家没得折腾了(jin)Q这一没折腾,很多人就没h生乐了(jin)Q到时候黑着脸来找我׃好?/p>

讄服务器端Q?/h3>

Z(jin)单v见,我现在只选用已经在同一局域网下的 Macbook Pro ?PC 两台?sh)脑Q而且Z(jin)教程更通用Q我把MBP也切换到Win7pȝ (是现在两台?sh)脑都是Win7?Q在它们中都安装?nbsp;Synergy 之后Q那么我们先要挑一C用键鼠的机器讄为服务器端,q里是我的台式机。如图:(x)

Synergy服务器端

?Configure Server q入讄界面Q?/strong>

Synergy讄

从右上角拖动一台电(sh)脑放到方框中 (删除的话是把?sh)脑图标拖放到左上角的垃圾?Q模拟现实的位置摆放好。例如我的台式机PC是服务器端,MacBook 是在台式机的左边Q按图中那样讄Q然后把名字Ҏ(gu)客户端电(sh)脑的计算机名QWin用户可以?#8220;我的?sh)?#8221;右键属性中看到Q。如果多台电(sh)脑也是这样依ơ添加,定后返回之前的界面Q按Start启动服务?br />
我测试的服务器是windowsQ控制的?sh)脑是mac, 如果大家不知道MAC?sh)脑?可以先启动服务器Q等客户端连接的时?菜单view->Log Output中会(x)有XX?sh)脑q接服务器的日志Q将里面的电(sh)脑名记录下来O(jin)K?/strong>

讄客户端:(x)

客户端的讄比服务器端要单得多。我们来?Macbook上,启动 Synergy 后,只要选择成客L(fng)模式Qƈ填上服务器的计算机名或者IP地址卛_。如下图Q设|好后,同样?Start 卛_让其q接服务器?/p>

Synergy客户? width=

一般来_(d)如果q接成功的话Q你的鼠标已l可以游走在两台?sh)脑之间了(jin)。当?dng)当的鼠标从PCUd到Macbook之后Q我们的键盘也会(x)对Macbook生效Q而对PC无效?jin)。我可以?MacBook 上CTRL+C拯一些文字,然后再移动回PC上按键盘CTRL+V_脓(chung)Q一切都是那么顺畅自?dng)非常有意思!

我测试客L(fng)?sh)脑是MACQ下载和服务器一致的版本Q打开l端Q到synergyc的目?/span>

sudo synergyc --daemon serverip
serverip 表示 上面配置好的服务器IP地址
--daemon参数 表示可以后台q行

有遇到的问题可以参考程序目录中?span style="color: red;">MacReadme.txt

写在后面Q?/h3>

Synergy 真的是一Ƅ当相当赞的YӞ它能大大提高多电(sh)脑用L(fng)工作效率Q特别是频繁要在不同q_下工作的朋友。更难能可贵的是Q这么优U的一ƾY件竟然还是免费开源的~不得不对作者肃然v敬啊。其实对于这UYӞ即是要付款的,我也觉得很值得Q因为它能真真切切地方便自己。目前唯一中不的是Q它只能跨机׃n剪脓(chung)板中的文本信息,不能跨电(sh)脑拷贝文Ӟ也不能方便地在两台电(sh)脑之间随意拖动来传输文gQ不然就真是堡?jin)。至于在Mac?a target="_blank" style="text-decoration: initial; color: #0086e3;">Linux下的操作、快捷键的设|等更多高的玩法就{你自己L腑֐?/p>

原文地址Q?a >http://www.iplaysoft.com/synergy.html



风轻云E 2012-11-14 15:02 发表评论
]]>有关Linux?a?so?o文g(?http://www.shnenglu.com/wc250en007/archive/2012/11/03/194186.html风轻云E风轻云EFri, 02 Nov 2012 23:53:00 GMThttp://www.shnenglu.com/wc250en007/archive/2012/11/03/194186.htmlhttp://www.shnenglu.com/wc250en007/comments/194186.htmlhttp://www.shnenglu.com/wc250en007/archive/2012/11/03/194186.html#Feedback0http://www.shnenglu.com/wc250en007/comments/commentRss/194186.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/194186.htmlgcc 生成 .a?rn)态库?.so动态库 

我们通常把一些公用函数制作成函数库,供其它程序用。函数库分ؓ(f)?rn)态库和动态库?/span>
U。静(rn)态库在程序编译时?x)被q接到目标代码中Q程序运行时不再需要该?rn)态库。动?/span>
库在E序~译时ƈ不会(x)被连接到目标代码中,而是在程序运行是才被载入Q因此在E序q?/span>
行时q需要动态库存在。本文主要通过举例来说明在Linux中如何创建静(rn)态库和动态库Q以
?qing)用它们?/span>

在创建函数库前,我们先来准备举例用的源程序,q将函数库的源程序编译成.o文g?/span>


W?步:(x)~辑得到举例的程?-hello.h、hello.c和main.cQ?/span>

hello.c(见程?)是函数库的源E序Q其中包含公用函数helloQ该函数在屏幕上输?
Hello XXX!"。hello.h(见程?)函数库的头文件。main.c(见程?)为测试库文g?/span>
ȝ序,在主E序中调用了(jin)公用函数hello?/span>

E序1: hello.h

#ifndef HELLO_H
#define HELLO_H

void hello(const char *name);

#endif //HELLO_H



E序2: hello.c

#include <stdio.h>

void hello(const char *name)
{
printf("Hello %s!\n", name);
}

E序3: main.c

#include "hello.h"

int main()
{
hello("everyone");
return 0;
}

W?步:(x)hello.c~译?o文gQ?/span>

无论?rn)态库Q还是动态库Q都是由.o文g创徏的。因此,我们必须源E序hello.c通过g
cc先编译成.o文g?/span>

在系l提C符下键入以下命令得到hello.o文g?/span>

# gcc -c hello.c

#

我们q行ls命o(h)看看是否生存?jin)hello.o文g?/span>

# ls

hello.c hello.h hello.o main.c

#


在ls命o(h)l果中,我们看到?jin)hello.o文gQ本步操作完成?/span>

下面我们先来看看如何创徏?rn)态库Q以?qing)用它?/span>

W?步:(x)?o文g创徏?rn)态库Q?/span>

?rn)态库文g名的命名规范是以lib为前~Q紧接着跟静(rn)态库名,扩展名ؓ(f).a。例如:(x)我们?/span>
创徏的静(rn)态库名ؓ(f)myhelloQ则?rn)态库文g名就是libmyhello.a。在创徏和用静(rn)态库Ӟ
需要注意这炏V创建静(rn)态库用ar命o(h)?/span>

在系l提C符下键入以下命令将创徏?rn)态库文glibmyhello.a?/span>

# ar -crv libmyhello.a hello.o

#

我们同样q行ls命o(h)查看l果Q?/span>

# ls

hello.c hello.h hello.o libmyhello.a main.c

#

ls命o(h)l果中有libmyhello.a?/span>

W?步:(x)在程序中使用?rn)态库Q?/span>

?rn)态库制作完了(jin)Q如何用它内部的函数呢Q只需要在使用到这些公用函数的源程序中?/span>
含这些公用函数的原型声明Q然后在用gcc命o(h)生成目标文g时指明静(rn)态库名,gcc会(x)?/span>
?rn)态库中将公用函数q接到目标文件中。注意,gcc?x)在静(rn)态库名前加上前缀libQ然后追
加扩展名.a得到的静(rn)态库文g名来查找?rn)态库文g?/span>

在程?:main.c中,我们包含?jin)?rn)态库的头文ghello.hQ然后在ȝ序main中直接调用公
用函数hello。下面先生成目标E序helloQ然后运行helloE序看看l果如何?/span>

法一 # gcc -o hello main.c -L. –lmyhelloQ自定义的库Ӟmain.cq可攑֜-L.?–lmyhello之间Q但是不能放在它俩之后,否则?x)提Cmyhello没定义,但是是系l的库时Q如g++ -o mainQ?L/usr/libQ?-lpthread main.cpp׃出错?/span>

法二 #gcc main.c libmyhello.a -o hello

法三Q先生成main.oQgcc -c main.c Q再生成可执行文Ӟ(x)gcc -o hello main.o libmyhello.aQ动态库q接时也可以q样做?/span>



# ./hello

Hello everyone!

#

我们删除?rn)态库文g试试公用函数hello是否真的q接到目标文?hello中了(jin)?/span>

# rm libmyhello.a

rm: remove regular file `libmyhello.a'? y

# ./hello

Hello everyone!

#

E序照常q行Q静(rn)态库中的公用函数已经q接到目标文件中?jin)?/span>

我们l箋看看如何在Linux中创建动态库。我们还是从.o文g开始?/span>

W?步:(x)?o文g创徏动态库文gQ?/span>

动态库文g名命名规范和?rn)态库文g名命名规范类|也是在动态库名增加前~libQ但?/span>
文g扩展名ؓ(f).so。例如:(x)我们创建的动态库名ؓ(f)myhelloQ则动态库文g名就是libmyh
ello.so。用gcc来创建动态库?/span>

在系l提C符下键入以下命令得到动态库文glibmyhello.so?/span>



# gcc -shared -fPCI -o libmyhello.so hello.o Q?o不可)(j)

#

我们照样使用ls命o(h)看看动态库文g是否生成?/span>

# ls

hello.c hello.h hello.o libmyhello.so main.c

#

W?步:(x)在程序中使用动态库Q?/span>

在程序中使用动态库和用静(rn)态库完全一P也是在用到q些公用函数的源E序中包?/span>
q些公用函数的原型声明,然后在用gcc命o(h)生成目标文g时指明动态库名进行编译。我?/span>
先运行gcc命o(h)生成目标文gQ再q行它看看结果?/span>

# gcc -o hello main.c -L. -lmyhello



(?#gcc main.c libmyhello.so -o hello 不会(x)出错Q没有libmyhello.so的话Q会(x)出错Q,但是接下?/hello ?x)提C出错,因ؓ(f)虽然q接时用的是当前目录的动态库Q但是运行时Q是?usr/lib中找库文件的Q将文glibmyhello.so复制到目?usr/lib中就O(jin)K?

# ./hello

./hello: error while loading shared libraries: libmyhello.so: cannot open shar
ed object file: No such file or directory

#

哦!出错?jin)。快看看错误提示Q原来是找不到动态库文glibmyhello.so。程序在q行Ӟ
?x)?usr/lib?lib{目录中查找需要的动态库文g。若扑ֈQ则载入动态库Q否则将?/span>
C类gq错误而终止程序运行。我们将文glibmyhello.so复制到目?usr/lib中,再试
试?/span>

# mv libmyhello.so /usr/lib

# ./hello

Hello everyone!

#

成功?jin)。这也进一步说明了(jin)动态库在程序运行时是需要的?/span>

我们回过头看看,发现使用?rn)态库和用动态库~译成目标程序用的gcc命o(h)完全一P
那当?rn)态库和动态库同名Ӟgcc命o(h)?x)用哪个库文g呢?q寚w题必I到底的?j)情Q?/span>
来试试看?/span>

先删除除.c?h外的所有文Ӟ恢复成我们刚刚编辑完举例E序状态?/span>

# rm -f hello hello.o /usr/lib/libmyhello.so

# ls

hello.c hello.h main.c

#

在来创徏?rn)态库文glibmyhello.a和动态库文glibmyhello.so?/span>

# gcc -c hello.c

# ar -cr libmyhello.a hello.o Q或-cvr Q?/span>

# gcc -shared -fPCI -o libmyhello.so hello.o

# ls

hello.c hello.h hello.o libmyhello.a libmyhello.so main.c

#

通过上述最后一条ls命o(h)Q可以发现静(rn)态库文glibmyhello.a和动态库文glibmyhello.s
o都已l生成,q在当前目录中。然后,我们q行gcc命o(h)来用函数库myhello生成目标
文ghelloQƈq行E序 hello?/span>

# gcc -o hello main.c -L. –lmyhello Q动态库和静(rn)态库同时存在Ӟ优先使用动态库Q?当然Q直?gcc main.c libmyhello.a -o hello的话Q就是指定ؓ(f)?rn)态库?jin)?j)

# ./hello

./hello: error while loading shared libraries: libmyhello.so: cannot open shar
ed object file: No such file or directory

#

从程序helloq行的结果中很容易知道,当静(rn)态库和动态库同名Ӟgcc命o(h)优先用动态库Q默认去q?usr/lib?lib{目录中的动态库Q将文glibmyhello.so复制到目?usr/lib中即可?/span>

Note:
~译参数解析
最主要的是GCC命o(h)行的一个选项:
-shared 该选项指定生成动态连接库Q让q接器生成Tcd的导出符可Q有时候也生成p接Wcd的导出符P(j)Q不用该标志外部E序无法q接。相当于一个可执行文g
-fPIC 表示~译Z|独立的代码Q不用此选项的话~译后的代码是位|相关的所以动态蝲入时是通过代码拯的方式来满不同q程的需要,而不能达到真正代码段׃n的目的?/span>

-L. 表示要连接的库在当前目录中;Q多个库Q在~译命o(h)行中Q将使用的静(rn)态库文g攑֜源文件后面就可以?jin)。比如:(x)gcc -L/usr/lib myprop.c libtest.a libX11.a libpthread.a -o myprop
其中-L/usr/lib指定库文件的查找路径。编译器默认在当前目录下先查找指定的库文Ӟ如前面的“法二 #gccmain.c libmyhello.a-o hello”Q?/span>


-lmyhello ~译器查扑֊态连接库时有隐含的命名规则,卛_l出的名字前面加上libQ后面加?so?a来确定库的名Ul(f)ibmyhello.so或libmyhello.a?/span>
LD_LIBRARY_PATHq个环境变量指示动态连接器可以装蝲动态库的\径?/span>
当然如果有root权限的话Q可以修?etc/ld.so.conf文gQ然后调?/sbin/ldconfig来达到同L(fng)目的Q不q如果没有root权限Q那么只能采用输出LD_LIBRARY_PATH的方法了(jin)?/span>

调用动态库的时候有几个问题?x)经常碰刎ͼ有时Q明明已l将库的头文件所在目?通过 “-I” includeq来?jin),库所在文仉过 “-L”参数引导Qƈ指定?#8220;-l”的库名,但通过ldd命o(h)察看Ӟ是L找不C指定链接的so文gQ这时你要作的就是通过修改 LD_LIBRARY_PATH或?etc/ld.so.conf文g来指定动态库的目录。通常q样做就可以解决库无法链接的问题?jin)?/span>

另:(x)

从上q可知,如何扑ֈ生成的动态库?U方式:(x)

(1)把库拯?usr/lib?lib目录下?/span>

(2)在LD_LIBRARY_PATH环境变量中加上库所在\径?/span>

例如动态库libhello.so?home/example/lib目录下:(x)

$export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/example/lib

(3) 修改/etc/ld.so.conf文gQ把库所在的路径加到文g末尾Qƈ执行ldconfigh。这P加入的目录下的所有库文g都可见?/span>

附:(x)像下面这h定\径去q接pȝ的静(rn)态库Q会(x)报错说要q接的库找不?

g++ -o main main.cpp -L/usr/lib libpthread.a 

必须q样g++ -o main main.cpp -L/usr/lib -lpthread才正??/span>

自定义的库考到/usr/lib 下时Q?/span>

g++ -o main main.cpp -L/usr/lib libpthread.a libthread.a libclass.a?x)出错,但是q样g++ -o main main.cpp -L/usr/lib -lpthread -lthread -lclass正了(jin)?/span>



转自Qhttp://hi.baidu.com/K�K�K�/blog/item/e58ed2f142913ea7a50f525e.html
来自: http://hi.baidu.com/jiyeqian/blog/item/d6886e22c93f5ef8d6cae27c.html

风轻云E 2012-11-03 07:53 发表评论
]]>
win7+eclipse+CDT+cygwin symbol could not be resolvedhttp://www.shnenglu.com/wc250en007/archive/2012/10/24/193763.html风轻云E风轻云EWed, 24 Oct 2012 02:56:00 GMThttp://www.shnenglu.com/wc250en007/archive/2012/10/24/193763.htmlhttp://www.shnenglu.com/wc250en007/comments/193763.htmlhttp://www.shnenglu.com/wc250en007/archive/2012/10/24/193763.html#Feedback2http://www.shnenglu.com/wc250en007/comments/commentRss/193763.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/193763.htmlhttp://www.cnblogs.com/williamwue/archive/2011/06/30/2094979.html

问题Q用eclipse 建立~译C++工程出现错误提示 symbol could not be resolved

解决办法Q?br />
1.window -> preferences -> C/C++ -> debug -> source lookup path > Path Mapping
Name:whatever  CompilationPath: \cygdirve\c      Local file system path:C:\

用cygwin下的c盘来替代当前的C?来查N要的库文?br />

2.
indexer:  index source and header files opened  in editor
window -> preferences -> C/C++ -> indexer

OK~译的错误解决了(jin)
q行时又出现?jin)如下的BUGQ?br />

找不到对应的文gQ无法进行调试,GOOGLE?jin)半天才扑ֈ解决的方法?x)
If you're working under Windows, have you set the required mappings?
Maybe Eclipse couldn't find the Source because of the missing mapping to
the (cygwin-)drive where your projects/workspaces are.

When you start Cygwin, enter "mount" and look for the mapping you have:
They may look like this:


Admin@bs11-01xp ~
$ mount
D:\cygwin\bin on /usr/bin type system (binmode)
D:\cygwin\lib on /usr/lib type system (binmode)
D:\cygwin on / type system (binmode)
c: on /cygdrive/c type system (binmode,noumount)
d: on /cygdrive/d type system (binmode,noumount)
e: on /cygdrive/e type system (binmode,noumount)
j: on /cygdrive/j type system (binmode,noumount)
n: on /cygdrive/n type system (binmode,noumount)
u: on /cygdrive/u type system (binmode,noumount)
w: on /cygdrive/w type system (binmode,noumount)
x: on /cygdrive/x type system (binmode,noumount)
y: on /cygdrive/y type system (binmode,noumount)
z: on /cygdrive/z type system (binmode,noumount)



My Projects ara all under J:\Projects, so my mapping needs to be present
in Eclipse as:
/cygdrive/j j:/


Open Eclipse and then click
- Windows => Preferences => C/C++ => Debug =>Common Source Lookup
Path
- Add a new Path Mapping: click [Add] => Path Mapping => [OK]
- Select the new Mapping => [Edith] => change Name of Mapping "Project
Source" => [Add]
set "Compilation path" to the Source (Sample cygwin!) "/cygdrive/j"
(without the quotes!)
set"Local file system path" tho "J:\" (without the quotes!)
上面配置对应?cygdrive/c  C:\
但是我在windows下的工程目录都是在G盘,同样d一个G盘的对应目录O(jin)K?br />




风轻云E 2012-10-24 10:56 发表评论
]]>
在linuxpȝ下用eclipse集成环境开发cocos2d-x android目Q集成java和c++环境(?http://www.shnenglu.com/wc250en007/archive/2012/10/24/193757.html风轻云E风轻云EWed, 24 Oct 2012 01:29:00 GMThttp://www.shnenglu.com/wc250en007/archive/2012/10/24/193757.htmlhttp://www.shnenglu.com/wc250en007/comments/193757.htmlhttp://www.shnenglu.com/wc250en007/archive/2012/10/24/193757.html#Feedback0http://www.shnenglu.com/wc250en007/comments/commentRss/193757.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/193757.html阅读全文

风轻云E 2012-10-24 09:29 发表评论
]]>
下蝲安装Cygwin(?http://www.shnenglu.com/wc250en007/archive/2012/10/23/193708.html风轻云E风轻云ETue, 23 Oct 2012 01:54:00 GMThttp://www.shnenglu.com/wc250en007/archive/2012/10/23/193708.htmlhttp://www.shnenglu.com/wc250en007/comments/193708.htmlhttp://www.shnenglu.com/wc250en007/archive/2012/10/23/193708.html#Feedback0http://www.shnenglu.com/wc250en007/comments/commentRss/193708.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/193708.htmlhttp://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin1.htm

我们可以到Cygwin的官方网站下载Cygwin的安装程序,地址是:(x)

    http://www.cygwin.com/

或者直接用下载连接来下蝲安装E序Q下载连接是Q?/p>

    http://www.cygwin.com/setup.exe

下蝲完成后,q行setup.exeE序Q出现安装画面。直接点“下一?#8221;Q出现安装模式的对话框,如下图所C:(x)

我们看到有三U安装模式:(x)

  • Install from InternetQ这U模式直接从Internet安装Q适合|速较快的情况Q?/li>
  • Download Without InstallingQ这U模式只从网上下载Cygwin的组件包Q但不安装;
  • Install from Local DirectoryQ这U模式与上面W二U模式对应,当你的Cygwinlg包已l下载到本地Q则可以使用此模式从本地安装Cygwin?/li>

从上qCU模式中选择适合你的安装模式Q这里我们选择W一U安装模式,直接从网上安装,当然在下载的同时QCygwinlg也保存到?jin)本圎ͼ以便以后能够再次安装。选中后,点击“下一?#8221;Q?/p>

q一步选择Cygwin的安装目录,以及(qing)一些参数的讄。默认的安装位置是C:\cygwin\Q你也可以选择自己的安装目录,然后选择“下一?#8221;Q?/p>

q一步我们可以选择安装q程中从|上下蝲的Cygwinlg包的保存位置Q选择完以后,点击“下一?#8221;Q?/p>

q一步选择q接的方式,选择你的q接方式Q然后点M一步,?x)出现选择下蝲站点的对话框Q如下图所C,

在这一步,需要注意,Z(jin)获得最快的下蝲速度Q我们首先在列表中寻找Cygwin中国镜像的地址Qhttp://www.cygwin.cnQ如果找到就选中q个地址Q如果找不到q个地址Q就在下面手动输入中国镜像的地址Qhttp://www.cygwin.cn/pub/Q再点击“Add”Q然后再在列表中选中。选择完成后,点击“下一?#8221;Q?/p>

q一步,我们选择需要下载安装的lg包,Z(jin)使我们安装的Cygwin能够~译E序Q我们需要安装gcc~译器,默认情况下,gccq不?x)被安装Q我们需要选中它来安装。ؓ(f)?jin)安装gccQ我们用鼠标点开lg列表中的“Devel”分支Q在该分支下Q有很多lgQ我们必ȝ是:(x)

binutils 
gcc 
gcc-mingw 
gdb

鼠标点击lg前面的@环按钮,?x)出现组建的版本日期Q我们选择最新的版本安装Q下图是选中后的四类lg的截图:(x)


binutilslg

gcclg

gcc-mingwlg

gdblg

选完以后Q我们选择下一步,q入安装q程Q如下图所C,

安装的时间依据你选择的组件以?qing)网l情况而定。安装完成后Q安装程序会(x)提示是否在桌面上创徏Cygwin图标{,点击完成退出安装程序?/p>



风轻云E 2012-10-23 09:54 发表评论
]]>
cocos2d-x android游戏使用自己的字?/title><link>http://www.shnenglu.com/wc250en007/archive/2012/10/15/193320.html</link><dc:creator>风轻云E</dc:creator><author>风轻云E</author><pubDate>Mon, 15 Oct 2012 08:58:00 GMT</pubDate><guid>http://www.shnenglu.com/wc250en007/archive/2012/10/15/193320.html</guid><wfw:comment>http://www.shnenglu.com/wc250en007/comments/193320.html</wfw:comment><comments>http://www.shnenglu.com/wc250en007/archive/2012/10/15/193320.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.shnenglu.com/wc250en007/comments/commentRss/193320.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wc250en007/services/trackbacks/193320.html</trackback:ping><description><![CDATA[在用cocos2d-x发布Androidq_游戏Ӟ游戏中可能需要显CZ文字体, 或者想昄漂亮的自定义字体,q怎么办呢Q?br />cocos2d-x中字体标{提供了(jin)CCLabelAtlas, CCLabelBMFont CCLabelTTF<br /><br />1.CCLabelAtlas速度快,支持单有限的几个字符或数字集?br /><br />2.CCLabelBMFont <br />我们可以用CCLabelBMFont来加载字体编辑器生成?plist文gQ但是当昄的文字很多时Q这U做法就有点Ҏ(gu)费力?br />如:(x)我们xC游戏中剧情介绍<br /><br />3.CCLabelTTF<br />支持选择一U字体来昄文字Q但是只支持pȝ中默认字?br /><div style="padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; width: 1307.3519287109375px; word-break: break-all; ">CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);</div><div></div><br /><strong>问题Q我们在Android游戏中想昄游戏剧情Q想用自己指定的一U字体gril.ttf(非系l默认字?,怎么?/strong><br /><br />其实cocos2d-x已经提供?jin)帮我们实现?br />构造CCLabelTTF中指定的字体名传l了(jin)<span style="font-size: 13.333333969116211px; background-color: #eeeeee; ">CCTexture2D </span><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">void</span> CCLabelTTF::updateTexture()<br />{<br />    CCTexture2D *tex;<br />    <span style="color: #0000FF; ">if</span> (m_tDimensions.width == 0 || m_tDimensions.height == 0)<br />    {<br />        tex = <span style="color: #0000FF; ">new</span> CCTexture2D();<br />        tex->initWithString(m_string.c_str(), <strong>m_pFontName</strong>->c_str(), m_fFontSize * CC_CONTENT_SCALE_FACTOR()) ;<br />    }<br />    <span style="color: #0000FF; ">else</span><br />    {<br />        tex = <span style="color: #0000FF; ">new</span> CCTexture2D();<br />        tex->initWithString(m_string.c_str(),<br />                            CC_SIZE_POINTS_TO_PIXELS(m_tDimensions), <br />                            m_hAlignment,<br />                            m_vAlignment,<br />                            m_pFontName->c_str(),<br />                            m_fFontSize * CC_CONTENT_SCALE_FACTOR());<br />    }<br /><br />   <img src="http://www.shnenglu.com/Images/dot.gif" alt="" />.<br />}</div>CCTexture2D又将字体名传l了(jin)CCImage<br />(PS:q里调用的是androidq_下的CCImagec?./platform/android/CCImage.h)<br />而不是win32q_下的CCImagec?./platform/win32/CCImage.h) )<br /><br />androidq_下的CCImage<br /><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; "><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">bool</span> CCImage::initWithString(<br />                               <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span> *    pText, <br />                               <span style="color: #0000FF; ">int</span>             nWidth<span style="color: #008000; ">/*</span><span style="color: #008000; "> = 0</span><span style="color: #008000; ">*/</span>, <br />                               <span style="color: #0000FF; ">int</span>             nHeight<span style="color: #008000; ">/*</span><span style="color: #008000; "> = 0</span><span style="color: #008000; ">*/</span>,<br />                               ETextAlign      eAlignMask<span style="color: #008000; ">/*</span><span style="color: #008000; "> = kAlignCenter</span><span style="color: #008000; ">*/</span>,<br />                               <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span> *    pFontName<span style="color: #008000; ">/*</span><span style="color: #008000; "> = nil</span><span style="color: #008000; ">*/</span>,<br />                               <span style="color: #0000FF; ">int</span>             nSize<span style="color: #008000; ">/*</span><span style="color: #008000; "> = 0</span><span style="color: #008000; ">*/</span>)<br />{<br />    <span style="color: #0000FF; ">bool</span> bRet = <span style="color: #0000FF; ">false</span>;<br /><br />    <span style="color: #0000FF; ">do</span> <br />    {<br />        CC_BREAK_IF(! pText);<br />        <br />        <strong>BitmapDC </strong>&dc = sharedBitmapDC();<br /><br />        CC_BREAK_IF(! dc.getBitmapFromJava(pText, nWidth, nHeight, eAlignMask, <strong>pFontName</strong>, nSize));<br /><br />        <span style="color: #008000; ">//</span><span style="color: #008000; "> assign the dc.m_pData to m_pData in order to save time</span><span style="color: #008000; "><br /></span>        m_pData = dc.m_pData;<br />        CC_BREAK_IF(! m_pData);<br /><br />        m_nWidth    = (<span style="color: #0000FF; ">short</span>)dc.m_nWidth;<br />        m_nHeight   = (<span style="color: #0000FF; ">short</span>)dc.m_nHeight;<br />        m_bHasAlpha = <span style="color: #0000FF; ">true</span>;<br />        m_bPreMulti = <span style="color: #0000FF; ">true</span>;<br />        m_nBitsPerComponent = 8;<br /><br />        bRet = <span style="color: #0000FF; ">true</span>;<br />    } <span style="color: #0000FF; ">while</span> (0);<br /><br />    <span style="color: #0000FF; ">return</span> bRet;<br />}</div><br />然后调用?jin)androidq_下的BitmapDC<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->    <span style="color: #0000FF; ">bool</span> getBitmapFromJava(<span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span> *text, <span style="color: #0000FF; ">int</span> nWidth, <span style="color: #0000FF; ">int</span> nHeight, CCImage::ETextAlign eAlignMask, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span> * pFontName, <span style="color: #0000FF; ">float</span> fontSize)<br />    {<br />        JniMethodInfo methodInfo;<br />        <span style="color: #0000FF; ">if</span> (! JniHelper::getStaticMethodInfo(methodInfo, "<strong>org/cocos2dx/lib/Cocos2dxBitmap</strong>", "<strong>createTextBitmap</strong>", <br />            "(Ljava/lang/String;Ljava/lang/String;IIII)V"))<br />        {<br />            CCLOG("%s %d: error to get methodInfo", __FILE__, __LINE__);<br />            <span style="color: #0000FF; ">return</span> <span style="color: #0000FF; ">false</span>;<br />        }<br /><br />        <img src="http://www.shnenglu.com/Images/dot.gif" alt="" /><img src="http://www.shnenglu.com/Images/dot.gif" alt="" /><br />}</div><br />q里昄?jin)调用JAVA代码<strong style="font-size: 13.333333969116211px; ">Cocos2dxBitmap.java</strong>下的<strong style="font-size: 13.333333969116211px; ">createTextBitmap</strong>函数<br /><br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->    <span style="color: #008000; ">/*</span><span style="color: #008000; "><br />     * @width: the width to draw, it can be 0<br />     * @height: the height to draw, it can be 0<br />     </span><span style="color: #008000; ">*/</span><br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> createTextBitmap(String content, String fontName, <br />            <span style="color: #0000FF; ">int</span> fontSize, <span style="color: #0000FF; ">int</span> alignment, <span style="color: #0000FF; ">int</span> width, <span style="color: #0000FF; ">int</span> height){<br />        <br />        content = refactorString(content);       <br />        Paint paint = <strong>newPaint</strong>(<strong>fontName</strong>, fontSize, alignment);<br />        <br />        TextProperty textProperty = computeTextProperty(content, paint, width, height);          <br /><br />        <span style="color: #0000FF; ">int</span> bitmapTotalHeight = (height == 0 ? textProperty.totalHeight:height);<br /><br />        <span style="color: #008000; ">//</span><span style="color: #008000; "> Draw text to bitmap</span><span style="color: #008000; "><br /></span>        Bitmap bitmap = Bitmap.createBitmap(textProperty.maxWidth, <br />                bitmapTotalHeight, Bitmap.Config.ARGB_8888);<br />        Canvas canvas = <span style="color: #0000FF; ">new</span> Canvas(bitmap);<br />        <br />        <span style="color: #008000; ">//</span><span style="color: #008000; "> Draw string</span><span style="color: #008000; "><br /></span>        FontMetricsInt fm = paint.getFontMetricsInt();<br />        <span style="color: #0000FF; ">int</span> x = 0;<br />        <span style="color: #0000FF; ">int</span> y = computeY(fm, height, textProperty.totalHeight, alignment);<br />        String[] lines = textProperty.lines;<br />        <span style="color: #0000FF; ">for</span> (String line : lines){<br />            x = computeX(paint, line, textProperty.maxWidth, alignment);<br />            canvas.drawText(line, x, y, paint);<br />            y += textProperty.heightPerLine;<br />        }<br />        <br />        initNativeObject(bitmap);<br />    }</div><br />?strong style="font-size: 13.333333969116211px; ">newPaint</strong>函数中调用了(jin)字体加蝲<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #0000FF; ">private</span> <span style="color: #0000FF; ">static</span> Paint newPaint(String fontName, <span style="color: #0000FF; ">int</span> fontSize, <span style="color: #0000FF; ">int</span> alignment){<br />        Paint paint = <span style="color: #0000FF; ">new</span> Paint();<br />        paint.setColor(Color.WHITE);<br />        paint.setTextSize(fontSize);      <br />        paint.setAntiAlias(<span style="color: #0000FF; ">true</span>);    <br />        <br />        <span style="color: #008000; ">/*</span><span style="color: #008000; "><br />         * Set type face for paint, now it support .ttf file.<br />         </span><span style="color: #008000; ">*/</span><br />        <span style="color: #0000FF; ">if</span> (fontName.endsWith(<span style="color: red; ">".ttf"</span>)){     <span style="color: red; "> //</span><span style="font-size: 14.44444465637207px; color: red; ">字体需?ttfl束</span><br />             <span style="color: #0000FF; ">try</span> {<br />                <span style="color: #008000; ">//</span><span style="color: #008000; ">Typeface typeFace = Typeface.createFromAsset(context.getAssets(), fontName);</span><span style="color: #008000; "><br /></span>                 <strong>Typeface typeFace = Cocos2dxTypefaces.<span style="color: #0000FF; ">get</span>(context, fontName);</strong><br />                  <strong>paint.setTypeface(typeFace);</strong><br />             } <span style="color: #0000FF; ">catch</span> (Exception e){<br />                 Log.e("Cocos2dxBitmap", <br />                     "error to create ttf type face: " + fontName);<br />                 <br />                 <span style="color: #008000; ">/*</span><span style="color: #008000; "><br />                  * The file may not find, use system font<br />                  </span><span style="color: #008000; ">*/</span><br />                 paint.setTypeface(Typeface.create(fontName, Typeface.NORMAL));<br />             }<br />        }<br />        <span style="color: #0000FF; ">else</span> {<br />            paint.setTypeface(Typeface.create(fontName, Typeface.NORMAL));<br />        }<br />        <br />        .......<br />        <br />        <span style="color: #0000FF; ">return</span> paint;<br />    }</div><div>QPS:Typefacecd义字体和字体内在的类型。这个类被用在画WPaint讄的时候,比如用textSize,textSkewX和textScale讄来指定text在画的时候如何来昄和测量?/div>android中用Typeface来指定字体)(j)<br /><br />另一炚w要注意的是:(x)字体需?ttfl束<br /><br /><strong>使用Ҏ(gu)</strong>Q?br />1.在proj.android\assets文g夹中d<span style="color: red; ">girl.ttf</span><br />2.E序中调用对应的字体可以了(jin)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->    CCSize size = CCDirector::sharedDirector()->getWinSize();<br />    CCLabelTTF* label = CCLabelTTF::create("女HelloWorld", "<span style="color: red; ">girl.ttf</span>", 24);<br />    label->setPosition(ccp(size.width/2, size.height/2));<br />    addChild(label);</div>3.如果你需要显C汉字,则需要将包含有字W串的文??cpp)转换为UTF-8格式~码Q否则会(x)昄q<br /><br />IOS和win32q_没有试Q相信的差不?br /><br />附上试囄Q?br /><img src="http://www.shnenglu.com/images/cppblog_com/wc250en007/cocos2d-x/Screenshot_2012-10-15-16-55-33.png" alt="" /><br /><br /><br /><br />哈哈 可以在游戏中打包自己惌的字体啦<br /><br /><br /><br /><br /><br /><br /><img src ="http://www.shnenglu.com/wc250en007/aggbug/193320.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wc250en007/" target="_blank">风轻云E</a> 2012-10-15 16:58 <a href="http://www.shnenglu.com/wc250en007/archive/2012/10/15/193320.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VC 生成后事?Post-Build Eventhttp://www.shnenglu.com/wc250en007/archive/2012/09/07/189795.html风轻云E风轻云EFri, 07 Sep 2012 04:15:00 GMThttp://www.shnenglu.com/wc250en007/archive/2012/09/07/189795.htmlhttp://www.shnenglu.com/wc250en007/comments/189795.htmlhttp://www.shnenglu.com/wc250en007/archive/2012/09/07/189795.html#Feedback1http://www.shnenglu.com/wc250en007/comments/commentRss/189795.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/189795.html
visual studio->右键工程->properties->Build Events->Post-Build Event->Command Line?br />
xcopy $(OutDir)$(TargetFileName) $(ProjectDir)..\Resources\ /Y

q个命o(h)式功能是生成目录下的exe文g拯到工E目录上一U目录下的Resources文g夹下

注意点:(x)

1.$(OutDir){宏路径中已l附带了(jin)'\'
2.生成后事件xcopy其实是q行一个控制台命o(h)Q所?strong>命o(h)不支?#8216;/'

像之前写的一个错误命?br />
xcopy $(OutDir)$(TargetFileName) $(ProjectDir)../Resources\ /Y
q行?x)提C错?br />
3.“/Y"是参敎ͼ表示有相同文件存在则替换

当然也可以拷贝整个文件夹
xcopy "$(ProjectDir)controls" "$(TargetDir)..\app1\controls" /y /i /e /exclude:CodeFilesToExclude.txt

具体参数p参考到CMD控制C查看xcopy的具体功能了(jin)...

风轻云E 2012-09-07 12:15 发表评论
]]>C++学习(fn)W记05 q名创建对?/title><link>http://www.shnenglu.com/wc250en007/archive/2012/08/30/188728.html</link><dc:creator>风轻云E</dc:creator><author>风轻云E</author><pubDate>Thu, 30 Aug 2012 04:15:00 GMT</pubDate><guid>http://www.shnenglu.com/wc250en007/archive/2012/08/30/188728.html</guid><wfw:comment>http://www.shnenglu.com/wc250en007/comments/188728.html</wfw:comment><comments>http://www.shnenglu.com/wc250en007/archive/2012/08/30/188728.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wc250en007/comments/commentRss/188728.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wc250en007/services/trackbacks/188728.html</trackback:ping><description><![CDATA[<div>1.应用Q?br /><strong>也许需要一个脚本,脚本中有一个参C递类名,你需要通过cd来动态的创徏q个对象Q这时候就需要动态创Z(jin)</strong><br /><br /> 2.原理Q?br />C++不是动态语aQ所以没法从语言机制上实现类的动态创建,但这L(fng)需求却有可能存在,一个类似的例子便是MFC中CWndcȝCreateҎ(gu)Q其W一个参Cؓ(f)Window Class的名字,q就允许用户通过class的名字来创徏相应的窗口?/div><div> 要想实现q一点,<span style="color: red; ">必须有一?#8220;理中心(j)”Q用于登记类的名字,q且通过名字能够调用对应的创建方法来创徏相应的实?/span>。结合类工厂的设计思想Q这里我们让一套承体pM的基cM?#8220;理中心(j)”Q由它来l护所有派生类的必要信息,包括cd和工厂函敎ͼq二者必d立v映射关系Qmap是不错的选择。定义了(jin)一个派生类后,它就自动向基c进行注?br /><br />3.实现:<br />可以用宏来代替:(x)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">* <br />    实现原理:<br />    基类里面用map理所有需要动态创?nbsp;【类?创徏对象的函数指针?br />    基类声明中需要添?nbsp;DECLEAR_DYNCRT_BASE ?cpp实现中要d IMPLEMENT_DYNCRT_BASE ?br />    zcd明中需要添?nbsp;DECLEAR_DYNCRT_CLASS 宏,cpp实现中要d IMPLEMENT_DYNCRT_CLASS ?br />    zcd中创Z(jin)一个全局对象向基cmap中注册【类?创徏对象的函数指针?br />    </span><span style="color: #008000; ">*/</span><br />#include <map><br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; "> 声明h动态创建的基类</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span> DECLEAR_DYNCRT_BASE(base) \<br /><span style="color: #0000FF; ">public</span>: \<br />typedef <span style="color: #0000FF; ">base</span>* (*ClassGen)(); \<br /><span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">void</span> _register(<span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* class_name, ClassGen class_gen) \<br />{ \<br />    class_set.insert(std::map<<span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>*, ClassGen>::value_type(class_name, class_gen)); \<br />} \<br /><span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">base</span>* create(<span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* class_name) \<br />{ \<br />    std::map<<span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>*, ClassGen>::iterator it = class_set.find(class_name);   \<br />    <span style="color: #0000FF; ">if</span> (it != class_set.end()) \<br />        <span style="color: #0000FF; ">return</span> (it->second)(); \<br />    <span style="color: #0000FF; ">return</span> NULL; \<br />} \<br /><span style="color: #0000FF; ">protected</span>: \<br /><span style="color: #0000FF; ">static</span> std::map<<span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>*, ClassGen> class_set;<br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; "> 用于实现基类</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span> IMPLEMENT_DYNCRT_BASE(base) \<br />std::map<<span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>*, <span style="color: #0000FF; ">base</span>::ClassGen> <span style="color: #0000FF; ">base</span>::class_set;<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; "> 用于声明一个能够被动态创建的c?用一个全局对象q行注册)</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span> DECLEAR_DYNCRT_CLASS(derived, base) \<br /><span style="color: #0000FF; ">public</span>: \<br />    <span style="color: #0000FF; ">struct</span> derived##register \<br />    { \<br />        derived##register() \<br />        { \<br />            <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">bool</span> bRegister = <span style="color: #0000FF; ">false</span>; \<br />            <span style="color: #0000FF; ">if</span> (!bRegister) \<br />            { \<br />                <span style="color: #0000FF; ">base</span>::_register(#derived, _CreateObjectByName); \<br />                bRegister = <span style="color: #0000FF; ">true</span>; \<br />            } \<br />        } \<br />    }; \<br />    <span style="color: #0000FF; ">static</span> <span style="color: #0000FF; ">base</span>* _CreateObjectByName() \<br />    { \<br />        <span style="color: #0000FF; ">return</span> <span style="color: #0000FF; ">new</span> derived; \<br />    }<br /><br /><br /><span style="color: #008000; ">//</span><span style="color: #008000; "> 用于实现一个能被动态创建的c?/span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">#define</span> IMPLEMENT_DYNCRT_CLASS(derived) \<br />    <span style="color: #0000FF; ">static</span> derived::derived##register _##derived##global_object;</div><br />我们需要做的就是是哦那个这四个?br />附加上测试代码:(x)<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">//</span><span style="color: #008000; "> 试实例:</span><span style="color: #008000; "><br /></span><span style="color: #0000FF; ">class</span> Base<br />{<br />    DECLEAR_DYNCRT_BASE(Base)<br />    DECLEAR_DYNCRT_CLASS(Base, Base)<br /><span style="color: #0000FF; ">public</span>:<br />    <span style="color: #0000FF; ">virtual</span> <span style="color: #0000FF; ">void</span> Print()<br />    {<br />        std::cout << "This is base!" << std::endl;<br />    }<br />};<br /><br />IMPLEMENT_DYNCRT_BASE(Base)<br />IMPLEMENT_DYNCRT_CLASS(Base)<br /><br /><br /><span style="color: #0000FF; ">class</span> Derived : <span style="color: #0000FF; ">public</span> Base<br />{<br />    DECLEAR_DYNCRT_CLASS(Derived, Base)<br /><span style="color: #0000FF; ">public</span>:<br />    <span style="color: #0000FF; ">virtual</span> <span style="color: #0000FF; ">void</span> Print()<br />    {<br />        cout << "This is derived!" << endl;<br />    }<br />};<br />IMPLEMENT_DYNCRT_CLASS(Derived)<br /><br /><br /><span style="color: #0000FF; ">int</span> main()<br />{<br />    Base* <span style="color: #0000FF; ">base</span> = Base::create("Base");<br />    <span style="color: #0000FF; ">if</span> (<span style="color: #0000FF; ">base</span>)<br />        <span style="color: #0000FF; ">base</span>->Print();<br /><br />    system("pause");<br />    <span style="color: #0000FF; ">return</span> 0;<br />}</div><br /><br />参考地址Q?a >http://blog.csdn.net/freefalcon/article/details/109275</a> <br /><br /><br /></div><img src ="http://www.shnenglu.com/wc250en007/aggbug/188728.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wc250en007/" target="_blank">风轻云E</a> 2012-08-30 12:15 <a href="http://www.shnenglu.com/wc250en007/archive/2012/08/30/188728.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2d-x UI之技能冷却按?/title><link>http://www.shnenglu.com/wc250en007/archive/2012/08/28/188511.html</link><dc:creator>风轻云E</dc:creator><author>风轻云E</author><pubDate>Tue, 28 Aug 2012 03:33:00 GMT</pubDate><guid>http://www.shnenglu.com/wc250en007/archive/2012/08/28/188511.html</guid><wfw:comment>http://www.shnenglu.com/wc250en007/comments/188511.html</wfw:comment><comments>http://www.shnenglu.com/wc250en007/archive/2012/08/28/188511.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/wc250en007/comments/commentRss/188511.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/wc250en007/services/trackbacks/188511.html</trackback:ping><description><![CDATA[<div><div>技能冷却的效果跟魔兽世界中的技能冷却类|功能如下:</div><div></div><div>技能图标点?yn)L?x)有按下效果Q抬起后开始冷却计Ӟ冷却计时技术后该图标才可以再次q行点击?/div><br />对应的图片资源:(x)</div><div><span style="color: red; ">    <strong>注意</strong>:dchild时要注意上下?/span></div><div><span style="color: red; ">    最下方是CCMenuItemImage 按钮囄</span></div><div><span style="color: red; ">    其次是模版图?半透明模版囄</span></div><div><span style="color: red; ">    最上方是CCProgressTimer 囄是最下图中较大的那个盄囄</span></div><div>q是使用的图片资?/div><div>  <img src="http://www.shnenglu.com/images/cppblog_com/wc250en007/cocos2d-x/normal.png" border="0" alt="" width="64" height="64" /> <img src="http://www.shnenglu.com/images/cppblog_com/wc250en007/cocos2d-x/click.png" border="0" alt="" width="64" height="64" /> <img src="http://www.shnenglu.com/images/cppblog_com/wc250en007/cocos2d-x/stencil.png" border="0" alt="" width="64" height="64" /></div><div></div><div><strong>动画原理</strong>Q?/div><div>非冷却状态时只显CCCMenuItemImageQ当冷却开始计时时Q将按钮设ؓ(f)不可点击状态,同将半透明模板和进度条_讄为可见状态,q且q度条精灵开始进行旋转动作,旋{l束后在回调函数中将半透明模板和进度条_设ؓ(f)不可见,按钮重新讄为可点击状态?br /><br /><strong>使用Ҏ(gu)</strong>Q?br /><div>创徏一个SkillButton指针Q修改冷却时_(d)动画表现(如蒙板从旋{改ؓ(f)竖直方向)QƈSkillButtond到l(f)ayer上即可?br /><br />传个效果?br /><img src="http://www.shnenglu.com/images/cppblog_com/wc250en007/cocos2d-x/SkillButton.png" border="0" alt="" width="636" height="238" /><br /><br /><br /><div>SkillButton.h</div><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #008000; ">/*</span><span style="color: #008000; ">* <br />    实现技能冷却效?nbsp;<br /><br />    Notice:dchild时要注意上下层关p?br />    最下方是按?nbsp;其次是半透明的模版图?nbsp;最上方是CCProgressTimerq度条精?br /></span><span style="color: #008000; ">*/</span><br />#ifndef _SKILLBUTTON_H_<br /><span style="color: #0000FF; ">#define</span> _SKILLBUTTON_H_<br />#include <cocos2d.h><br /><br /><span style="color: #0000FF; ">class</span> SkillButton : <span style="color: #0000FF; ">public</span> cocos2d::CCNode<br />{<br /><span style="color: #0000FF; ">public</span>:<br />    SkillButton();<br />    <span style="color: #0000FF; ">virtual</span> ~SkillButton();<br /><br />    <span style="color: #008000; ">/*</span><span style="color: #008000; ">* 创徏一个SkillButton对象<br />        </span><span style="color: #008000; ">*/</span><br />    <span style="color: #0000FF; ">static</span> SkillButton* createSkillButton(<span style="color: #0000FF; ">float</span> cdTime,<br />                                        <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* stencil_file_name, <br />                                        <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* button_normal_name, <br />                                        <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* button_click_name);<br /><br />    <span style="color: #008000; ">/*</span><span style="color: #008000; ">* CD旉讄<br />        </span><span style="color: #008000; ">*/</span><br />    <span style="color: #0000FF; ">void</span>    setCDTime(<span style="color: #0000FF; ">float</span> time) { mCDTime = time; }<br />    <span style="color: #0000FF; ">float</span>   getCDTime() <span style="color: #0000FF; ">const</span> { <span style="color: #0000FF; ">return</span> mCDTime; }<br /><br />    <span style="color: #008000; ">/*</span><span style="color: #008000; ">* 技能按钮点d?nbsp;</span><span style="color: #008000; ">*/</span><br />    <span style="color: #0000FF; ">void</span>    skillClickCallBack(cocos2d::CCObject* obj);<br /><br />    <span style="color: #008000; ">/*</span><span style="color: #008000; ">* 技能冷却完毕回?/span><span style="color: #008000; ">*/</span><br />    <span style="color: #0000FF; ">void</span>    skillCoolDownCallBack(cocos2d::CCNode* node);<br /><br /><span style="color: #0000FF; ">private</span>:<br /><br />    <span style="color: #008000; ">/*</span><span style="color: #008000; ">* 初始?nbsp;</span><span style="color: #008000; ">*/</span><br />    <span style="color: #0000FF; ">bool</span>    init(<span style="color: #0000FF; ">float</span> cdTime, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* stencil_file_name, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* button_normal_name, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* button_click_name);<br /><br /><span style="color: #0000FF; ">private</span>:<br />    cocos2d::CCMenuItemImage*   mItemSkill;     <span style="color: #008000; ">//</span><span style="color: #008000; "> 技能按?/span><span style="color: #008000; "><br /></span>    cocos2d::CCMenu*            mMenuSkill;     <span style="color: #008000; ">//</span><span style="color: #008000; "> 技能按钮所在menu</span><span style="color: #008000; "><br /></span>    cocos2d::CCSprite*          mStencil;       <span style="color: #008000; ">//</span><span style="color: #008000; "> 蒙板_,黑色半透明(q个是ؓ(f)?jin)显CZ个冷却计时效?</span><span style="color: #008000; "><br /></span>    cocos2d::CCProgressTimer*   mProgressTimer; <span style="color: #008000; ">//</span><span style="color: #008000; "> 旉q度条精?360度旋?</span><span style="color: #008000; "><br /></span>    <span style="color: #0000FF; ">float</span>                       mCDTime;          <span style="color: #008000; ">//</span><span style="color: #008000; "> CD旉</span><span style="color: #008000; "><br /></span>};<br /><br /><br /><span style="color: #0000FF; ">#endif</span></div><br /><br />SkillButton.cpp<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->#include "SkillButton.h"<br /><br /><br />USING_NS_CC;<br /><br />SkillButton::SkillButton():<br />    mItemSkill(NULL),<br />    mMenuSkill(NULL),<br />    mStencil(NULL),<br />    mProgressTimer(NULL),<br />    mCDTime(1.f)<br />{<br /><br />}<br /><br />SkillButton::~SkillButton()<br />{<br /><br />}<br /><br />SkillButton* SkillButton::createSkillButton(<span style="color: #0000FF; ">float</span> cdTime, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* stencil_file_name, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* button_normal_name, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* button_click_name)<br />{<br />    SkillButton* skillButton = <span style="color: #0000FF; ">new</span> SkillButton();<br />    <span style="color: #0000FF; ">if</span> (skillButton && skillButton->init(cdTime, stencil_file_name, button_normal_name, button_click_name))<br />    {<br />        skillButton->autorelease();<br />        <span style="color: #0000FF; ">return</span> skillButton;<br />    }<br />    <span style="color: #0000FF; ">else</span><br />    {<br />        delete skillButton;<br />        skillButton = NULL;<br />    }<br /><br />    <span style="color: #0000FF; ">return</span> NULL;<br />}<br /><br /><span style="color: #0000FF; ">bool</span> SkillButton::init(<span style="color: #0000FF; ">float</span> cdTime, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* stencil_file_name, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* button_normal_name, <span style="color: #0000FF; ">const</span> <span style="color: #0000FF; ">char</span>* button_click_name)<br />{<br />    CCAssert(stencil_file_name, "SkillButton::init stencil_file_name != NULL");<br />    CCAssert(button_normal_name, "SkillButton::init button_normal_name != NULL");<br />    CCAssert(button_click_name, "SkillButton::init button_click_name != NULL");<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> Notice:dchild时要注意上下?br />    </span><span style="color: #008000; ">//</span><span style="color: #008000; "> 最下方是CCMenuItemImage 其次是模版图?nbsp;最上方是CCProgressTimer<br /><br />    </span><span style="color: #008000; ">//</span><span style="color: #008000; "> d技能按?/span><span style="color: #008000; "><br /></span>    mItemSkill = CCMenuItemImage::create(button_normal_name, button_click_name, <span style="color: #0000FF; ">this</span>, menu_selector(SkillButton::skillClickCallBack));<br />    mItemSkill->setPosition(CCPointZero);<br /><br />    mMenuSkill = CCMenu::create(mItemSkill, NULL);<br />    mMenuSkill->setPosition(CCPointZero);<br />    addChild(mMenuSkill, -100);<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> d阴媄(jing)模版</span><span style="color: #008000; "><br /></span>    mStencil = CCSprite::create(stencil_file_name);<br />    mStencil->setPosition(CCPointZero);<br />    mStencil->setVisible(<span style="color: #0000FF; ">false</span>);<br />    addChild(mStencil);<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> d旋{q度条精?/span><span style="color: #008000; "><br /></span>    CCSprite* progressSprite = CCSprite::create(button_normal_name);<br />    mProgressTimer = CCProgressTimer::create(progressSprite);<br />    mProgressTimer->setPosition(CCPointZero);<br />    mProgressTimer->setVisible(<span style="color: #0000FF; ">false</span>);<br />    addChild(mProgressTimer, 100);<br /><br />    mCDTime = cdTime;<br />    <span style="color: #0000FF; ">return</span> <span style="color: #0000FF; ">true</span>;<br />}<br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">* 技能按钮点d?nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">void</span> SkillButton::skillClickCallBack(cocos2d::CCObject* obj)<br />{<br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> 冷却计时Q即时状态技能按钮不可点?/span><span style="color: #008000; "><br /></span>    mItemSkill->setEnabled(<span style="color: #0000FF; ">false</span>);<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> 模版可见</span><span style="color: #008000; "><br /></span>    mStencil->setVisible(<span style="color: #0000FF; ">true</span>);<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> 讄_q度条ؓ(f)时?/span><span style="color: #008000; "><br /></span>    mProgressTimer->setVisible(<span style="color: #0000FF; ">true</span>);<br />    mProgressTimer->setType(kCCProgressTimerTypeRadial);<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; ">准备一?U旋?60度的动画(逐渐覆盖半透模板Ş成冷却效?q里q行计时冷却动画的实现和旉控制)</span><span style="color: #008000; "><br /></span>    CCActionInterval* action_progress_to = CCProgressTo::create(mCDTime, 100);<br />    CCCallFunc* action_callback = CCCallFuncN::create(<span style="color: #0000FF; ">this</span>, callfuncN_selector(SkillButton::skillCoolDownCallBack));<br />    mProgressTimer->runAction(CCSequence::create(action_progress_to, action_callback, NULL));<br />}<br /><br /><span style="color: #008000; ">/*</span><span style="color: #008000; ">* 技能冷却完成回?nbsp;</span><span style="color: #008000; ">*/</span><br /><span style="color: #0000FF; ">void</span> SkillButton::skillCoolDownCallBack(CCNode* node)<br />{<br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> 讄蒙板不可?/span><span style="color: #008000; "><br /></span>    mStencil->setVisible(<span style="color: #0000FF; ">false</span>);<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> q度条技能不可见</span><span style="color: #008000; "><br /></span>    mProgressTimer->setVisible(<span style="color: #0000FF; ">false</span>);<br /><br />    <span style="color: #008000; ">//</span><span style="color: #008000; "> 按钮|ؓ(f)可用</span><span style="color: #008000; "><br /></span>    mItemSkill->setEnabled(<span style="color: #0000FF; ">true</span>);<br />}</div><br />试代码Q?br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->    mSkillButton = SkillButton::createSkillButton(2.f, "stencil.png", "normal.png", "click.png");<br />    mSkillButton->setPosition(ccp(s.width/2, s.height/2));<br />    addChild(mSkillButton);</div><br /><a title="代码下蝲" href="/Files/wc250en007/cocos2d-x/SkillButton.rar">代码下蝲</a><br /><br />参考地址Q?br /><a >http://blog.sina.com.cn/s/blog_732784f70100umuj.html</a> <br /><a >http://www.cocos2dev.com/?p=64</a> <br /><br /></div></div><img src ="http://www.shnenglu.com/wc250en007/aggbug/188511.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/wc250en007/" target="_blank">风轻云E</a> 2012-08-28 11:33 <a href="http://www.shnenglu.com/wc250en007/archive/2012/08/28/188511.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>cocos2d-x lSpritedMaskQ遮|?http://www.shnenglu.com/wc250en007/archive/2012/08/26/188362.html风轻云E风轻云ESun, 26 Aug 2012 15:06:00 GMThttp://www.shnenglu.com/wc250en007/archive/2012/08/26/188362.htmlhttp://www.shnenglu.com/wc250en007/comments/188362.htmlhttp://www.shnenglu.com/wc250en007/archive/2012/08/26/188362.html#Feedback0http://www.shnenglu.com/wc250en007/comments/commentRss/188362.htmlhttp://www.shnenglu.com/wc250en007/services/trackbacks/188362.html阅读全文

风轻云E 2012-08-26 23:06 发表评论
]]>
þۺϹ׾Ʒ| þþƷav| þۺϾɫۺϾƷ| þþѹ۳ӰԺ| 69Ʒþþþվ| Ʒþþþþ| þAVվ| þþþþҹӰԺ| þùƷվ| þþþavר | þ99ֻоƷ| 2021ھþþƷ| 91ƷۺϾþĻþһ | 91þۺ| þúݺݰۺӰԺ| ۺϾþþþþ| ղƷþþþþþ| ޹պۺϾþþƷ| ŮһaëƬþw| ˾þۺ | ó˾þAvѸ| ԸߺþþþþþþAAAAA| 94þù׾Ʒ| þþƷҹһ| ޾þһ| þþƷѲ| ޹Ʒþþ| þ99Ʒ| 99þþƷѾƷһ| þWWW˳һƬ| ɫúݺݾþۺ| þþƷƷƾ| ˾þۺ2020| þۺϺݺۺϾþü | ھƷþþþþ99| ۺ˾þۺ| ھƷþþþþþþõӰ | 91ƷۺϾþ㽶| þŷձƷ| ɫۺϾþۺ| Ʒvaþþþþþ|