当前位置:  编程技术>移动开发
本页文章导读:
    ▪arm9编译环境的装配(modem侧代码的编译环境)        arm9编译环境的安装(modem侧代码的编译环境)需要安装的软件: 1.cygwin 2.perl 5.8.8 3.RVDS2.2.1 4.svn 5.python2.6.4(7x30平台需要) 6.msxml6_x64.msi(64位系统要安装相应64位的安装包) 安装cygwin Cygwin的安装.........
    ▪ 6、CCLayer        六、CCLayer  一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象。CCLayer本身几乎没什么功能,对比CCNode,CCLayer可用于接收触摸和加速计输入.........
    ▪ Mina 环境筹建       Mina 环境搭建最近在学习服务器,而对JAVA又比较熟悉的我就开始了学习服务器了。可能很多人会说还是用c++吧,不错现在很多大型游戏公司都是用C++的。这里我不得不说我的C++ 真的很一般了.........

[1]arm9编译环境的装配(modem侧代码的编译环境)
    来源: 互联网  发布时间: 2014-02-18
arm9编译环境的安装(modem侧代码的编译环境)

需要安装的软件:

1.cygwin

2.perl 5.8.8

3.RVDS2.2.1

4.svn

5.python2.6.4(7x30平台需要)

6.msxml6_x64.msi(64位系统要安装相应64位的安装包)

安装cygwin

Cygwin的安装步骤如下:

1、选择Local Directory

选择Install from Local Directory

2、设置安装路径和选项(必须是这个目录)

C:\Utils\cygwin

Install For项里选择 AAll Users(RECOMMENDED)

5、选择Local Directory路径,可以将网络上的路径映射到本地,如Z:默认下载过来的cygwin目录即可,

6、选择全部安装(点击all后面的环形箭头,将状态改为install)

7、执行下一步,开始安装。

8、当安装完后,如果需要使用cygwin下的命令可以将安装目录添加到系统环境变量path中。

 

安装perl5.8.8

1.安装perl只需要注意一点,就是perl必须安装到c:\utils\perl目录下。

 

安装python2.6.4

1.安装python2.6.4只需要注意一点,就是将python2.6.4安装到c:\python26目录下

 

安装svn

1.默认安装即可。2个svn,一个是命令行的svn,另一个是图形界面的svn。

 

安装SSH

在安装之前一定要把cygwin sshd服务关闭

安装 F-SecureSSHServer软件(windows版本ssh)(一直点”下一步”就可以)

 

设置svn的环境变量(放在path环境变量的最前面)

 

 

RVDS安装

1.安装

modem编译环境\RVCT\RVDS2.2\RVDS_2_2_SP_1\dist_237_win_32-pentium\setup.exe

将工具安装到:C:\apps\RVDS221

2.安装license时,使用modem编译环境\RVCT\Arm license(important)目录下的license-merge5x.dat文件。

3.将modem编译环境\RVCT\RVDS2.2下的593目录copy到C:\apps\RVDS221\RVCT\Programs\2.2目录下。

4.将modem编译环境\RVCT\RVDS2.2\RVCT-pj.rar解压到C:\apps\RVDS221目录下。

5.执行c:\apps\RVDS221\crack.bat脚本。

6.修改c:\apps\RVDS221\license-merge5x.dat文件,将文件中的xxxxxxxxxxxx替换为:本机的MAC地址,然后用将此文件拷贝到C:\apps\RVDS221\Licenses目录下。如文件存在直接替换。

7.建立目录c:\flexlm,拷贝C:\apps\RVDS221\Licenses下的license-merge5x.dat到c:\flexlm中。

8.重新安装license,运行license wizard 4.0 重新安装license,安装时使用c:\apps\RVDS221\license-merge5x.dat。

9.验证:执行armcc,如果不提示错误即安装成功。

 

 

安装TI平台的arm工具

将rvct22_616_windows.zip中文件加压到C:\apps\RVDS221\RVCT\Programs\2.2\503\win_32-pentium替换原来的文件。

进入C:\apps\RVDS221\RVCT\Programs\2.2\503\win_32-pentium目录中,执行一下命令。

copy armcc.exe tcc.exe

copy armcc.exe tcpp.exe

copy armcc.exe armcpp.exe

 

 

TI平台modem工具安装检查

armcpp --vsn

tcc --vsn

tcpp --vsn

armlink --vsn

armasm --vsn

fromelf --vsn

 

显示内容如下代表成功:

ARM /Thumb C/C++ Compiler, RVCT2.2  [Build 616]

Softwar supplied by: mammoth//ZWTiSO 2005

 

 

 

 

 


    
[2] 6、CCLayer
    来源: 互联网  发布时间: 2014-02-18
六、CCLayer

  一个游戏中可以有很多个场景,每个场景里面又可能包含有多个图层,这里的图层一般就是CCLayer对象。CCLayer本身几乎没什么功能,对比CCNode,CCLayer可用于接收触摸和加速计输入。其实,cocos2d对图层并没有严格的要求,图层不一定要使用CCLayer类,它也可以是一个简单的CCNode,为什么呢?我们新建一个图层不就是为了能够容纳更多的子节点么,CCNode也可以添加子节点啊。所以,如果你的图层不需要接收触摸和加速计输入,就尽量使用CCNode表示图层,CCLayer因为能够接收触摸和加速计输入会增加不必要的开销。移动、缩放、旋转整个图层,图层上的所有节点也会跟着一起移动、缩放、旋转。


常用设置
1.接收触摸输入

CCLayer默认情况是不接收触摸输入的,需要显示地设置isTouchEnabled为YES

self.isTouchEnabled = YES;
设置isTouchEnabled为YES后,就会调用图层相应的方法来处理触摸输入:

这些都是在CCStandardTouchDelegate协议中定义的方法

1> 当单指接触到屏幕时

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;

2> 当手指在屏幕上移动时

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event;

3> 当单指离开屏幕时

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event;

4> 当触摸被取消时

- (void)ccTouchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event;
很少会发生触摸被取消的情况,所以大多数情况下可忽略,或用ccTouchesEnded代替,因为ccTouchesCancelled和ccTouchesEnded类似


大部分情况下,我们需要知道触摸发生在什么位置。这里的触摸事件是由UIKit框架接收的,因此需要把触摸位置转换为OpenGL坐标。

比如在手指移动过程中:

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    // 获取触摸对象
    UITouch *touch = [touches anyObject];
    // 获取触摸在UIView视图上的位置
    CGPoint uiPoint = [touch locationInView:touch.view];
    // 转换为OpenGL坐标
    CGPoint glPoint = [[CCDirector sharedDirector] convertToGL:uiPoint];
}


下面利用一个小例子来综合使用上述的方法,假设图层上有个精灵,我手指触摸到哪,这个精灵的位置就在哪

首先在图层初始化的时候添加精灵

// 图层的init方法
-(id) init
{
    if( (self=[super init])) {
        // 初始化一个精灵
        CCSprite *lufy = [CCSprite spriteWithFile:@"lufy.png"];
        CGSize size = [[CCDirector sharedDirector] winSize];
        lufy.position =  ccp(size.width * 0.5f, size.height * 0.5f);
        // 添加精灵,并设置标记
        [self addChild: lufy z:0 tag:kLufyTag];
        
        self.isTouchEnabled = YES;
    }
    return self;
}

接下来是在图层中接收触摸输入

// 计算触摸在图层中的位置(OpenGL坐标)
- (CGPoint)locationInLayer:(NSSet *)touches {
    // 获取触摸对象
    UITouch *touch = [touches anyObject];
    // 获取触摸在UIView视图上的位置
    CGPoint uiPoint = [touch locationInView:touch.view];
    // 转换为OpenGL坐标
    CGPoint glPoint = [[CCDirector sharedDirector] convertToGL:uiPoint];
    
    return glPoint;
}

// 由于ccTouchesBegan、ccTouchesMoved、ccTouchesEnded中的做法都是一样,所以抽成一个方法
- (void)dealTouches:(NSSet *)touches {
    // 计算触摸的位置
    CGPoint point = [self locationInLayer:touches];
    // 根据标记获取精灵
    CCSprite *lufy = (CCSprite *)[self getChildByTag:kLufyTag];
    // 设置精灵的位置
    lufy.position = point;
}

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [self dealTouches:touches];
}

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
    [self dealTouches:touches];
}

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
    [self dealTouches:touches];
}

图层的触摸输入暂时讲到这里,其他高级的用法在后面会提及


2.接收加速计输入

CCLayer默认情况是不接收加速计输入的,需要显示地设置isAccelerometerEnabled为YES

self.isAccelerometerEnabled = YES;
设置isAccelerometerEnabled为YES后,就会调用图层相应的方法来处理加速计输入:

这是在UIAccelerometerDelegate协议中定义的方法

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
    // typedef double UIAccelerationValue;
    UIAccelerationValue x =  acceleration.x;
    UIAccelerationValue y =  acceleration.y;
    UIAccelerationValue z =  acceleration.z;
    // x,y,z代表三维中任意方向的加速度
}


CCLayerColor

有时候,我们想给整个图层设置一种背景颜色,那么就需要用到CCLayerColor了,CCLayerColor是CCLayer的子类

// 红色:#ffff0000
ccColor4B color = ccc4(255, 0, 0, 255);
// 初始化一个颜色图层
CCLayerColor *layerColor = [CCLayerColor layerWithColor:color];
// 添加到场景中
[scene addChild:layerColor];
效果图:


CCLayerGradient

CCLayerGradient是CCLayerColor的子类,可以给图层设置渐变色

// 红色:#ffff0000
ccColor4B red = ccc4(255, 0, 0, 255);
// 蓝色:#ff0000ff
ccColor4B blue = ccc4(0, 0, 255, 255);
// 初始化一个渐变图层,从红色渐变到蓝色
CCLayerGradient *layerGradient = [CCLayerGradient layerWithColor:red fadingTo:blue];
// 添加到场景中
[scene addChild:layerGradient];
效果图:


CCLayerMultiplex

CCLayerMultiplex继承自CCLayer,称为"多重图层"。它可以包含多个CCLayer对象,但在任意时刻只可以有一个CCLayer处于活动状态,用switchTo:和switchToAndReleaseMe:方法可以让某个图层处于活动状态,区别在于switchToAndReleaseMe:方法会先释放当前处于活动状态的图层,再让参数中要求的图层处于活动状态

// 创建2个图层
CCLayer *layer1 = [CCLayer node];
CCLayer *layer2 = [CCLayer node];

// 创建一个多重图层,包含了layer1和layer2

CCLayerMultiplex *plex = [CCLayerMultiplex layerWithLayers:layer1, layer2, nil];

// 让layer1处于活动状态(layer2还在内存中)
[plex switchTo:0];

// 让layer2处于活动状态(layer1还在内存中)
[plex switchTo:1];

// 释放当前处于活动状态的layer2(layer2从内存中移除),然后让layer1处于活动状态
[plex switchToAndReleaseMe:0]; 

图层之间的切换是没有过渡效果的




    
[3] Mina 环境筹建
    来源: 互联网  发布时间: 2014-02-18
Mina 环境搭建

最近在学习服务器,而对JAVA又比较熟悉的我就开始了学习服务器了。可能很多人会说还是用c++吧,不错现在很多大型游戏公司都是用C++的。这里我不得不说我的C++ 真的很一般了。所以这里先学java吧,其实语言也在学习的时候没必要太纠结了!废话太多了,开始入正题了。

本节目录

1 :有用网站

2 :准备资源

3 :环境搭建

4 :Demo测试

首先说一下为什么我这里要选择Mina ,1:Mina是开源的(我一般都会选择开源的框架的)

                                                                      2:Apache 用了很多他的框架,一般来说还是很稳定的。 所以我选择了Mina 。横向比较现在用的比较多的还有netty ,XSocket 等等。

 

Mina 的作用: 它是封装了JavaNIO(如果对JavaNIO不了解的可以再网上找一些资料来看一下,如果这个都没弄明白的话后面就很难继续了,所以建议先打好基础)

 的一个开源框架,更利于我们开发java 服务器。

1 :有用网站

       . 官方网站http://mina.apache.org/

2 :准备资源

       . 搭建Mina 环境必备的资源有 : mina-core-2.0.7.jar , slf4j-api.jar , log4j.jar , slf4j-simple.jar (分别去官网下载吧,版本号这里可能不同以最新的为准,如果实在不知道下载的可以私聊我给你)

3 :环境搭建

        . java 环境

            学习java 的都应该清楚的,JDK 下载  ;  环境变量配置 ;  Eclipse 下载

        . Mina 环境

            以外部包的方式导入上面准备的4个资源(右键项目:build path  / configuare build path / add external jars  )     导入后如下结构图,表明我们的环境搭建好了。

           - Referenced Libraries

               -mina-core-2.0.7.jar 

              - slf4j-api.jar 

              - log4j.jar 

              - slf4j-simple.jar

     

4 :Demo测试

        Server 端

          .  创建Server

            

public class MinaServer 
{
	public static void main(String[] args)
	{
		//创建ServerScoket
		SocketAcceptor acceptor = new NioSocketAcceptor();
		//设置传输方式(这里设置成对象传输模式,还有很多的类型后面会具体讲到
		DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
		ProtocolCodecFilter filter = new ProtocolCodecFilter(
				new ObjectSerializationCodecFactory());
		chain.addLast("objectFilter", filter);
		// 添加消息处理

		acceptor.setHandler(new MinaServerHanlder());
		// 开启服务器 
		int bindPort = 9988;
		try {
                      acceptor.bind(new InetSocketAddress(bindPort));
		} catch (IOException e) {
                            e.printStackTrace();
                  }
	}

}

          .  创建消息处理类  

import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IdleStatus; import org.apache.mina.core.session.IoSession;

public class MinaServerHanlder extends IoHandlerAdapter {  private int count = 0;

 // 由底层决定是否创建一个session  public void sessionCreated(IoSession session) {   System.out.println("新客户连接");  }

 // 创建了session 后会回调sessionOpened  public void sessionOpened(IoSession session) throws Exception {   count++;   System.out.println("第 " + count + " 个 client 登陆!address: : "     + session.getRemoteAddress());  }

 // 当收到了客户端发送的消息后会回调这个函数  public void messageReceived(IoSession session, Object message)    throws Exception {         System.out.println("服务器收到客户端发送指令 :" + message);

 }

 // 发送成功后会回调的方法  public void messageSent(IoSession session, Object message) {   System.out.println("message send to client");  }

 // session 关闭调用  public void sessionClosed(IoSession session) {   System.out.println("one client disconnect");  }

 // session 空闲的时候调用  public void sessionIdle(IoSession session, IdleStatus status) {   System.out.println("connect idle");  }

 // 异常捕捉  public void exceptionCaught(IoSession session, Throwable cause) {   System.out.println("throws exception");  } }

  

      Client 端

       Client 端的创建方式和服务器类似的

          创建客户端

      

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.serialization.ObjectSerializationCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketConnector;


public class MinaClient {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
            // 创建Socket
             NioSocketConnector connector = new NioSocketConnector();
             //设置传输方式
             DefaultIoFilterChainBuilder chain = connector.getFilterChain();
             ProtocolCodecFilter filter = new ProtocolCodecFilter(new ObjectSerializationCodecFactory());
             chain.addLast("objectFilter", filter);
             //设置消息处理
             connector.setHandler(new MinaClientHanlder());
             //超时设置
             connector.setConnectTimeoutCheckInterval(30);
             //连接
             ConnectFuture cf = connector.connect(new InetSocketAddress("localhost", 9988));
             cf.awaitUninterruptibly();
             cf.getSession().getCloseFuture().awaitUninterruptibly();
             connector.dispose();
             
	}

}

 

          创建客户端消息处理

import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession;

public class MinaClientHanlder extends IoHandlerAdapter {  public void sessionOpened(IoSession session) throws Exception {      System.out.println("客户端登陆");      session.write("hello world");  }      public void sessionClosed(IoSession session)  {    System.out.println("client close");  }    public void messageReceived(IoSession session , Object message)throws Exception  {   System.out.println("客户端接受到了消息") ;     } }

运行结果

server :
新客户连接
第 1 个 client 登陆!address: : /127.0.0.1:55497
服务器收到客户端发送指令 :hello world

client :

客户端登陆

后记 :本来想上传图片的,可惜CSDN 这个上传图片那叫一个慢啊。无奈了....如果有什么问题可以回复我。

 

 

 

2楼pdw_jsp鏄ㄥぉ 20:47CSDN 涓婇潰鐨勪唬鐮佹帓鐗堬紝涓轰粈涔堜細閭f牱鐨勫憿 锛熷ソ鎭跺績鍟婏紝杩樻湁灏辨槸鍥剧墖涓婁紶鐪熷績鎱㈠晩1楼fire_work鏄ㄥぉ 17:26椤朵竴涓�,"ParentId

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
建站其它 iis7站长之家
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3