界面引擎:cocos2d-x
编码系统:windows2003
WINDOWS上面开发android手机游戏需要安装:CYGWIN,jdk,eclipse,android-ndk,Android_SDK,其中CYGWIN安装比较麻烦,同时安装后必须保证Android_SDK下载安装了android的版本,这样才能编译。
因为android机型繁多,屏幕分辨率也很多,我们不可能做很多套资源来适应,所以只能适应大部分的分辨率。在此使用CCSprite* menu_bg = CCSprite::create("Back.png");获取背景图 CCSize size = CCDirector::sharedDirector()->getWinSize();获取屏幕大小float scale = size.height / menu_bg->getContentSize().height;获取屏幕和背景的比例 这样获取了这个整体的比例后,对所有的界面对象都使用setScale(scale);这个函数来进行缩放以适应不同屏幕,尽管如此这样会对有些异型屏幕产生影响,比如宽和高比例失调,但只要设置好这个背景的高和宽的比例这并不影响游戏的运行和显示,因此可以不用考虑。
cocos2d-x中添加socket通信:
包含
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <fcntl.h>
#include "errno.h"
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <arpa/inet.h>
包含
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <fcntl.h>
#include "errno.h"
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <arpa/inet.h>
这几个文件,这是linux中的一些类库文件,通过包含这些文件我们可以新建立一个SOCKET
socket的建立和消息发送跟WINDOWS里面非常类似,但是消息的接收就不一样了。WINDOWS里面我们有一个消息WM_SOCKET_NOTIFY可以通过这个消息获取socket的连接和消息接受等,但是在这里我们就没法使用这个消息,这里我们只能新建立一个线程来监听socket的消息接收,并且处理消息,这里又出现一个问题,即cocos2d-x界面绘制是单线程,我们不能在线程中根据消息来更新界面,即使是弹出窗口也不能,起初我以为是线程建立没成功,多次测试后发现建立是成功的,查阅了很多资料才发现线程不能更新界面,于是我们只能使用一个折中的方法,就是建立一个消息队列(queue)。
入队 q.push(x);将x接到队列的末端。
出队 q.pop();弹出队列的第一个元素,注意,并不会返回被弹出元素的值。
访问队首元素 q.front(),即最早被压入队列的元素。
访问队尾元素 q.back(),即最后被压入队列的元素。
判断队列空 q.empty(),当队列空时,返回true。
访问队列中的元素个数 q.size()。
返回第一个元素 q.begin()。
返回超尾的迭代器 q.end()。
同时 使用线程控制消息队列的进出的时候必须使用锁。
static pthread_mutex_t s_asyncStructQueueMutex;
操作队列前锁定
pthread_mutex_lock(&s_asyncStructQueueMutex);
操作队列后释放
thread_mutex_unlock(&s_asyncStructQueueMutex);
static pthread_mutex_t s_asyncStructQueueMutex;
操作队列前锁定
pthread_mutex_lock(&s_asyncStructQueueMutex);
操作队列后释放
thread_mutex_unlock(&s_asyncStructQueueMutex);
我们将接收到的消息
发送到这个消息队列中,然后主线程从这个消息队列中读取消息,进行逻辑处理。
发送到这个消息队列中,然后主线程从这个消息队列中读取消息,进行逻辑处理。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。