当前位置:  编程技术>移动开发
本页文章导读:
    ▪利用Box2D兑现子弹类型的精灵随弹道曲线旋转角度        利用Box2D实现子弹类型的精灵随弹道曲线旋转角度 这是2个月之前的开发,遇到的问题.当时用了2天时间得以解决。思考过程比较绕,但只要理解了原理 那么付诸于代码后,就变的so easy...   理.........
    ▪ menu.addIntentOptions 平添动态菜单详解        menu.addIntentOptions 添加动态菜单详解 android的一个activity可以再选中某项之后按menu键弹出特定的菜单,也就是动态菜单。动态菜单的实现是靠menu类中的addIntentOptions函数实现的,具体的声明如.........
    ▪ sed+grep批量轮换字符串       sed+grep批量替换字符串   格式:grep oldString -r1 /path | xargs sed -i "s/oldString/newString/g"   例如:    grep fuck_you -rl /home/fuck | xargs sed -i "s/fuck_you/fuck_me/g"   网上使用下面这种格式比较多,但是.........

[1]利用Box2D兑现子弹类型的精灵随弹道曲线旋转角度
    来源: 互联网  发布时间: 2014-02-18
利用Box2D实现子弹类型的精灵随弹道曲线旋转角度

这是2个月之前的开发,遇到的问题.当时用了2天时间得以解决。思考过程比较绕,但只要理解了原理 那么付诸于代码后,就变的so easy...

 

理解的核心就是要用一阶导数.

 

当你的物体(子弹,炮弹,各种物体...)被发射后,box2D会帮你模拟弹道曲线!这根本不用去想也不用你管!但你会发现刚体在空中时,其角度不会发生变化! 所以就变成了一个角度打出去,落地前绝不变化的情况! 

 

当时我自己用纯数学的计算,解决了问题。但当时刚接触Box2d 对其API不了解!最后才知道用其刚体属性的线速度即可替代我那之前几十行的数学算法!   不啰嗦了,刚体怎么发射出去的我就不管了! 在此只说明怎么改变刚体在空中时随曲线旋转,那么其依附在刚体上的精灵 也就自然旋转了! 

 

仔细看。。代码so easy 

 

这是被发射物体类内的 update 方法 自己刷新自己 自己改变角度 即可

 以下是objective-C代码 用的是Cocos2d框架

-(void) update:(ccTime) dt{
	
	//弹道旋转
	b2Vec2 vel = buBody->GetLinearVelocity();		//buBody 代表子弹刚体对象
	float  ang = atanf(vel.y / vel.x);			
	buBody->SetTransform(buBody->GetPosition(),ang);
	
}

 

 


    
[2] menu.addIntentOptions 平添动态菜单详解
    来源: 互联网  发布时间: 2014-02-18
menu.addIntentOptions 添加动态菜单详解
android的一个activity可以再选中某项之后按menu键弹出特定的菜单,也就是动态菜单。动态菜单的实现是靠menu类中的addIntentOptions函数实现的,具体的声明如下:

int android.view.Menu.addIntentOptions(
            int groupId,
            int itemId,
            int order,
            ComponentName caller,
            Intent[] specifics,
            Intent intent,
            int flags,
            MenuItem[] outSpecificItems)
这个函数是用来动态产生option menu的
函数参数分析:

1.       groupid  就是菜单组的编号;

2.       itemId   (可以让其为0)

3.       order     菜单顺序,可以不考虑

4.       Caller      就是发起activity的activity

5.       Specifics  以action+uri的具体方式来增加激活相应activity的菜单项

6.       Intent      以categroy+uri这种一般形式来增加激活相应activity的菜单项

参数Intent和Specifics的区别是,一个用categroy+uri来匹配activity,一个用action+uri来匹配activity。

8.       outSpecificItems  这个是返回的MenuItem值,对应以specifics方式匹配的菜单项。



下面以android sdk中notepad的例子来说明其用法。项目所在位置:...\android-sdk-windows\samples\android-8\NotePad

来看这个例子中的NotesList.java文件中的public boolean onPrepareOptionsMenu(Menu menu)函数,这个函数会在设定普通option menu菜单项的的onCreateOptionsMenu函数之后调用,这个函数的主要部分是如下代码:

view plaincopy to clipboardprint?
Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId());   
  
  
Intent[] specifics = new Intent[1];   
specifics[0] = new Intent(Intent.ACTION_EDIT, uri);   
MenuItem[] items = new MenuItem[1];   
  
  
Intent intent = new Intent(null, uri);   
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);   
menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0,   
         items);  
           Uri uri = ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId()); 


            Intent[] specifics = new Intent[1]; 
            specifics[0] = new Intent(Intent.ACTION_EDIT, uri); 
            MenuItem[] items = new MenuItem[1]; 


            Intent intent = new Intent(null, uri); 
            intent.addCategory(Intent.CATEGORY_ALTERNATIVE); 
            menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, null, specifics, intent, 0, 
                    items); 


其中ContentUris.withAppendedId(getIntent().getData(), getSelectedItemId())会得到选中项的信息,这个信息将会作用匹配用的intent的

data部分。

specifics[0] = new Intent(Intent.ACTION_EDIT, uri)在这里是这个意思:到androidMenifest.xml中去找activity, 如果有某个activity的<intent-

filter>项的action和data与Intent.ACTION_EDIT和相应的uri匹配,就为这个activity添加一个菜单项,菜单项的显示名称从相应activity的

android:label项得来。


Intent intent = new Intent(null, uri);          

intent.addCategory(Intent.CATEGORY_ALTERNATIVE);

是这个意思:到androidMenifest.xml中去找activity,如果有某些activity的<intent-filter>项的Category和data与

Intent.CATEGORY_ALTERNATIVE和相应的uri匹配,就为这些activity分别添加菜单项,菜单项的显示名称从相应activity的android:label项

得来。


下面可以做个试验,在AndroidMenifest.xml中新建一个activity MyAdd

view plaincopy to clipboardprint?
<activity android:name="MyAdd" android:label="@string/title_myadd"  
        android:windowSoftInputMode="stateVisible">  
    <intent-filter android:label="@string/resolve_myadd">  
        <action android:name="com.android.notepad.action.MYADD" />  
        <category android:name="android.intent.category.ALTERNATIVE" />  
        <data android:mimeType="vnd.android.cursor.item/vnd.google.note" />  
    </intent-filter>  
</activity>  
        <activity android:name="MyAdd" android:label="@string/title_myadd" 
                android:windowSoftInputMode="stateVisible"> 
            <intent-filter android:label="@string/resolve_myadd"> 
                <action android:name="com.android.notepad.action.MYADD" /> 
                <category android:name="android.intent.category.ALTERNATIVE" /> 
                <data android:mimeType="vnd.android.cursor.item/vnd.google.note" /> 
            </intent-filter> 
        </activity> 


写好该activity的layout和实现后,选中noteslist中的一项后,点menu可以看到菜单中多出了一项,点击可以切换到该activity。

这是以函数中Intent匹配的菜单项,当然也可以用Specifics来匹配。下面示例:

删除掉MyAdd这个activity中的 <category android:name="android.intent.category.ALTERNATIVE" />,这时该activity已经与Intent不匹配了,

再将onPrepareOptionsMenu函数中的代码改成如下:

view plaincopy to clipboardprint? 
Intent[] specifics = new Intent[2];   
specifics[0] = new Intent(Intent.ACTION_VIEW, uri);   
specifics[1] = new Intent("com.android.notepad.action.MYADD",uri);   
MenuItem[] items = new MenuItem[2];  
            Intent[] specifics = new Intent[2]; 
            specifics[0] = new Intent(Intent.ACTION_VIEW, uri); 
            specifics[1] = new Intent("com.android.notepad.action.MYADD",uri); 
            MenuItem[] items = new MenuItem[2]; 


选中一项点菜会发现,动态菜单又回来了,不过这次是用Specific来匹配的。

    
[3] sed+grep批量轮换字符串
    来源: 互联网  发布时间: 2014-02-18
sed+grep批量替换字符串

 

格式:grep oldString -r1 /path | xargs sed -i "s/oldString/newString/g"

 

例如: 


 

 grep fuck_you  -rl  /home/fuck | xargs sed -i "s/fuck_you/fuck_me/g"
 
网上使用下面这种格式比较多,但是我在ubuntu 10.10下就是出错,提示:没有这个文件或者文件夹

sed -i "s/oldString/newString/g" 'grep oldString -r1 /path '
  据我观测,是命令:‘grep oldString -r1 /path’ 没有执行。去掉外面的单引号,这条语句是可以执行,但是跟sed一起使用的话,就会出现参数错误提示。

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
sqlserver iis7站长之家
▪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