当前位置:  编程技术>移动开发
本页文章导读:
    ▪很久发博客了,发个不久前写的一个方法吧        很久发博客了,发个最近写的一个方法吧。 /** * 设定按钮动作 * @param normal * @param press * @param btn */ private StateListDrawable getPressableDrawable(Context context, Drawable normal, Drawable pressed){ MyView m.........
    ▪ 动态设立控件大小        动态设置控件大小 LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) text .getLayoutParams(); DisplayMetrics dm = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(dm); linearParams.w.........
    ▪ CCSprite利用Bezier(贝塞尔)干抛物线动作       CCSprite利用Bezier(贝塞尔)做抛物线动作   原文地址:http://blog.csdn.net/xiaominghimi/article/details/6779873         如果我们想实现让CCSprite进行抛物线运动的话,那么我想童鞋们首先会想到利用Box2d.........

[1]很久发博客了,发个不久前写的一个方法吧
    来源: 互联网  发布时间: 2014-02-18
很久发博客了,发个最近写的一个方法吧。
/**
	 * 设定按钮动作
	 * @param normal
	 * @param press
	 * @param btn
	 */
	private StateListDrawable getPressableDrawable(Context context, Drawable normal, Drawable pressed){
		MyView myButton = new MyView(context);
		return myButton.getBackground(normal, pressed);
	}
	
	private class MyView extends View{
		public MyView(Context context) {
			super(context);
		}
		
		public StateListDrawable getBackground(Drawable normal, Drawable pressed) {
            StateListDrawable stateListDrawable = new StateListDrawable();
            stateListDrawable.addState(View.PRESSED_ENABLED_STATE_SET, pressed);
            stateListDrawable.addState(View.ENABLED_FOCUSED_STATE_SET, pressed);
            stateListDrawable.addState(View.ENABLED_STATE_SET, normal);
            stateListDrawable.addState(View.FOCUSED_STATE_SET, pressed);
            stateListDrawable.addState(View.EMPTY_STATE_SET, normal);
            return stateListDrawable;
        }
	}

 设置imageView按下效果的方法。


    
[2] 动态设立控件大小
    来源: 互联网  发布时间: 2014-02-18
动态设置控件大小

LinearLayout.LayoutParams linearParams = (LinearLayout.LayoutParams) text
				.getLayoutParams();
		DisplayMetrics dm = new DisplayMetrics();
		activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
		linearParams.width = dm.widthPixels;
linearParams.width = dm.heightPixels;
		text.setLayoutParams(linearParams); 
 

    
[3] CCSprite利用Bezier(贝塞尔)干抛物线动作
    来源: 互联网  发布时间: 2014-02-18
CCSprite利用Bezier(贝塞尔)做抛物线动作

 

原文地址:http://blog.csdn.net/xiaominghimi/article/details/6779873

        如果我们想实现让CCSprite进行抛物线运动的话,那么我想童鞋们首先会想到利用Box2d或者其他物理引擎去为CCSprite创建物理世界中对应的刚体进行实现,但是反过来想,对于不熟悉Box2d或者其他物理引擎的童鞋,肯定不方便,那么Himi今天为大家介绍另外一种不实用物理引擎实现CCSprite抛物线方式;

        这里我直接将封装好的方法贴上来,注释都在代码中了:


//  抛物线    -Himi   

//mSprite:需要做抛物线的精灵  

//startPoint:起始位置  

//endPoint:中止位置  

//dirTime:起始位置到中止位置的所需时间  

- (void) moveWithParabola:(CCSprite*)mSprite startP:(CGPoint)startPoint endP:(CGPoint)endPoint dirTime:(float)time{   

    float sx = startPoint.x;  

    float sy = startPoint.y;   

    float ex =endPoint.x+50;  

    float ey =endPoint.y+150;   

    int h = [mSprite contentSize].height*0.5;  

    ccBezierConfig bezier; // 创建贝塞尔曲线  

    bezier.controlPoint_1 = ccp(sx, sy); // 起始点  

    bezier.controlPoint_2 = ccp(sx+(ex-sx)*0.5, sy+(ey-sy)*0.5+200); //控制点  

    bezier.endPosition = ccp(endPoint.x-30, endPoint.y+h); // 结束位置     

    CCBezierTo *actionMove = [CCBezierTo actionWithDuration:time bezier:bezier];   

    [mSprite runAction:actionMove];  

}  


     之前在Android上我也有讲解过贝塞尔曲线的博文,但是Android中不同于cocos2d封装这个,在cocos2d中的Bezier是封装为了精灵动作,让精灵按照贝塞尔曲线的路线去运动;那么以上封装的代码中对于抛物线运动来说最重要的一点就是创建贝塞尔曲线的第二个点,这个点控制着精灵路径的所经过的最高点,这里务必要知道;

 

    这种实现方式虽然没有物理系统对刚体施加力来的真实,但是!我想这段代码的实用性还是很大的,至少不需要使用box2d引擎相关知识,最重要的优点是不会存在上一章介绍的代码混编带来的编译错误~

//----  OK,下面来介绍第二个知识点:

        很多童鞋学习cocos2d,一般不经常更新的动画,会使用cocos2d封装的动作,例如旋转、渐变、位移等等,那么一旦使用动作后,肯定就有需要两个动作一起播放的需求,那么基本上童鞋们大脑中第一闪现的就是利用cocos2d的动作序列  CCSequence,但是效果不理想,原因很简单,因为顾名思义,既然是动作序列,那就是按照动作的顺序一个动作一个动作的进行播放,也就是说利用动作序列只能达到连续播放动作,无法同时播放动作的目的;

        那么在这里给大家一个方法能让两个动作同时播放的方法:

         这里为了讲解方便,我在刚才封装的贝塞尔曲线上的方法上进行修改,添加一个旋转的动作,让贝塞尔曲线运动与旋转动作同时播放,这里Himi使用一根“矛”的图片作用示意图来说明,因为矛与箭的运动方式最常用的动作肯定是一边旋转一边抛物线位移,这样才更加真实;

        OK,看下封装角度后的抛物线并同时旋转方法如下:


//  抛物线运动并同时旋转    -Himi   

//mSprite:需要做抛物线的精灵  

//startPoint:起始位置  

//endPoint:中止位置  

//startA:起始角度  

//endA:中止角度  

//dirTime:起始位置到中止位置的所需时间  

- (void) moveWithParabola:(CCSprite*)mSprite startP:(CGPoint)startPoint endP:(CGPoint)endPoint startA:(float)startAngle endA:(float)endAngle dirTime:(float)time{   

    float sx = startPoint.x;  

    float sy = startPoint.y;   

    float ex =endPoint.x+50;  

    float ey =endPoint.y+150;   

    int h = [mSprite contentSize].height*0.5;  

    //设置精灵的起始角度  

    sprite.rotation=startAngle;  

    ccBezierConfig bezier; // 创建贝塞尔曲线  

    bezier.controlPoint_1 = ccp(sx, sy); // 起始点  

    bezier.controlPoint_2 = ccp(sx+(ex-sx)*0.5, sy+(ey-sy)*0.5+200); //控制点  

    bezier.endPosition = ccp(endPoint.x-30, endPoint.y+h); // 结束位置     

    CCBezierTo *actionMove = [CCBezierTo actionWithDuration:time bezier:bezier];   

    //创建精灵旋转的动作  

    CCRotateTo *actionRotate =[CCRotateTo actionWithDuration:time angle:endAngle];  

    //将两个动作封装成一个同时播放进行的动作  

    CCAction * action = [CCSpawn actions:actionMove, actionRotate, nil];   

    [mSprite runAction:action];  

}  

  附上运行效果图:

  

 

   左侧的矛是起始位置,后侧的是抛物线与旋转两个动作同时进行运动中的矛~

 

     好了,就讲这么多吧,今天样书出来了,比较海皮~哈哈;  


    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪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功能代码片段总结
javascript开源软件 iis7站长之家
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


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

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

浙ICP备11055608号-3