当前位置: 编程技术>移动开发
本页文章导读:
▪利用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?
其中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的layout和实现后,选中noteslist中的一项后,点menu可以看到菜单中多出了一项,点击可以切换到该activity。
这是以函数中Intent匹配的菜单项,当然也可以用Specifics来匹配。下面示例:
删除掉MyAdd这个activity中的 <category android:name="android.intent.category.ALTERNATIVE" />,这时该activity已经与Intent不匹配了,
再将onPrepareOptionsMenu函数中的代码改成如下:
选中一项点菜会发现,动态菜单又回来了,不过这次是用Specific来匹配的。
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一起使用的话,就会出现参数错误提示。
最新技术文章: