关于海岛奇兵神像属性问题

(ERROR:15) & 访客不能直接访问[原]Android 中关于属性动画的一些思考,或许能为你解决一定的性能问题 - 推酷
[原]Android 中关于属性动画的一些思考,或许能为你解决一定的性能问题
========================================================
作者:qiujuer
转载请注明出处:
——学之开源,用于开源;初学者的心态,与君共勉!
========================================================
用动画用的久了渐渐的喜欢上她了,虽然它或许并不是女的,但我希望是~~
用的久了,我渐渐的思考性能的问题了;在我的一篇(
)介绍按钮点击特效的文章中使用了大量的属性动画,但是在后来我想了很久,其是只需要一个属性动画就能解决所有问题。
下面咱们来说说怎么把多个属性动画合成一个。
一般来说,我们在自定义控件或者控制一些移动操作的时候会使用到这样的属性动画,其是属性动画并不是想象中那么难,只要看看用法举一反三用用就会了~
private float paintX = 0;
private float paintY = 0;
private Property&MyView, Float& PaintYProperty = new Property&MyView, Float&(Float.class, &paintY&) {
public Float get(MyView object) {
return object.paintY;
public void set(MyView object, Float value) {
object.paintY =
private Property&MyView, Float& PaintXProperty = new Property&MyView, Float&(Float.class, &paintX&) {
public Float get(MyView object) {
return object.paintX;
public void set(MyView object, Float value) {
object.paintX =
private void start() {
ObjectAnimator aPaintX = ObjectAnimator.ofFloat(this, PaintXProperty, 0, 100);
ObjectAnimator aPaintY = ObjectAnimator.ofFloat(this, PaintYProperty, 0, 100);
//AnimatorSet
AnimatorSet set = new AnimatorSet();
set.playTogether(aPaintX, aPaintY);
set.start();
在上述的中我们建立了一个 关于坐标的属性动画,一般来说坐标含有XY ,所以我们定义了两个属性动画;然后 打包到一个&AnimatorSet 中管理 。至于&AnimatorSet 是什么?你可以理解为这个类是一个属性的管理类,你可以添加 N 多的动画到其中,然后统一调度开启停止;在&AnimatorSet 中维护着一个动画队列。
在上面虽然最后打包到了&AnimatorSet 中进行统一调度,但是你看看&AnimatorSet 中的部分源码你就知道其最后也是启动每一个的属性动画进行启动的。
这也就是我们今天需要想想的地方,你现在完成一个很复杂的操作,其中不但包含一个坐标或者是一堆坐标,也或者包含了很多的颜色变化,此时你使用属性动画就不是一个明智的选择了;为什么呢?你想想你要完成我所说的需要创建多少个属性动画类?很多吧~浪费内存CPU吧?你敢说没有???
既然今天是说优化,那就来优化优化~~
针对上面的情况我们有两种解决方案
使用一个&Animation ,然后在
&protected void applyTransformation(float interpolatedTime, Transformation t)
中回调处理具体的情况;具体可以看看我的文章:
中有一定的介绍,其效率远远要高于上面的多个属性动画的情况。
第一种是采用最基本的&Animation 来实现的,这第二种也是使用属性动画。
先看看一部分代码:
public static class ViewProperty {
private float paintX = 0;
private float paintY = 0;
public ViewProperty() {
public ViewProperty(float paintX, float paintY) {
this.paintX = paintX;
this.paintY = paintY;
是的我们使用一个内部类把所有的属性进行一次封装;然后就可以只使用一个属性动画了;现在看看代码:
private ViewProperty mProperty = new ViewProperty(0, 0);
private Property&MyView, ViewProperty& PaintProperty = new Property&MyView, ViewProperty&(ViewProperty.class, &paintX&) {
public ViewProperty get(MyView object) {
return object.mP
public void set(MyView object, ViewProperty value) {
object.mProperty =
private void start() {
ObjectAnimator aPaint = ObjectAnimator.ofObject(this, PaintProperty, new ViewProperty(0, 0), new ViewProperty(100, 100));
aPaint.start();
是不是很简单?是不是只有一个属性动画:ObjectAnimator ,是的 ~是的 !&
别高兴的太早了~~看看实际情况:
擦~~~这个是怎么了??哪里出错了??
我们应该想想,我们的想法是好的,封装一个属性集合类的实例,然后就可以只使用一个属性动画了;但是问题出在哪里呢?
我们想想, 对于Float,Int这些而言,在更改的时候都是采用 C=A+(B-A)*T 这样的情况来的,但是对于Object类型来说呢?这个它怎么减去,怎么运算?
我想这是应该我们去实现的地方,
我们需要告诉程序按照什么样的方式去运算:& C=A+(B-A)*T 这样的一个公式,告诉它在时间等值情况下进行了10%的时间的时候应该是: new ViewProperty(10, 10), 这个值!
TypeEvaluator
public interface TypeEvaluator&T& {
* This function returns the result of linearly interpolating the start and end values, with
* &code&fraction&/code& representing the proportion between the start and end values. The
* calculation is a simple parametric calculation: &code&result = x0 + t * (x1 - x0)&/code&,
* where &code&x0&/code& is &code&startValue&/code&, &code&x1&/code& is &code&endValue&/code&,
* and &code&t&/code& is &code&fraction&/code&.
* @param fraction
The fraction from the starting to the ending values
* @param startValue The start value.
* @param endValue
The end value.
* @return A linear interpolation between the start and end values, given the
&code&fraction&/code& parameter.
public T evaluate(float fraction, T startValue, T endValue);
} 在动画类中,有这样的一个接口,
这个接口所完成的工作就是上面的:&C=A+(B-A)*T&
其是我们可以看看:
public static &T, V& ObjectAnimator ofObject(T target, Property&T, V& property,
TypeEvaluator&V& evaluator, V... values) {
ObjectAnimator anim = new ObjectAnimator(target, property);
anim.setObjectValues(values);
anim.setEvaluator(evaluator);
在属性动画&ObjectAnimator&类的实例化中有这样的一个构造函数,在该构造函数中就允许用户自己指定自己的运算接口类。
现在我们继承该接口,并实现它:
PaintEvaluator
public static class PaintEvaluator implements TypeEvaluator {
private static final PaintEvaluator sInstance = new PaintEvaluator();
public static PaintEvaluator getInstance() {
public Object evaluate(float fraction, Object startValue, Object endValue) {
ViewProperty start = (ViewProperty) startV
ViewProperty end = (ViewProperty) endV
float x = start.paintX + fraction * (end.paintX - start.paintX);
float y = start.paintY + fraction * (end.paintY - start.paintY);
return new ViewProperty(x, y);
很简单吧。就是分别计算x,y;然后返回一个类的实例就OK了。
然后修改上面的启动代码为:
private ViewProperty mProperty = new ViewProperty(0, 0);
private static PaintEvaluator PAINTEVALUATOR = new PaintEvaluator();
private static Property&MyView, ViewProperty& PaintProperty = new Property&MyView, ViewProperty&(ViewProperty.class, &paint&) {
public ViewProperty get(MyView object) {
return object.mP
public void set(MyView object, ViewProperty value) {
object.mProperty =
private void start() {
ObjectAnimator paint = ObjectAnimator.ofObject(this, PaintProperty, PAINTEVALUATOR, new ViewProperty(0, 0), new ViewProperty(100, 100));
paint.start();
OK,大功告成~~
现在才是够简单,够舒爽~~
祝,大家都能写出称心如意的代码~~
========================================================
作者:qiujuer
转载请注明出处:
——学之开源,用于开源;初学者的心态,与君共勉!
========================================================
已发表评论数()
已收藏到推刊!
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
排版有问题
没有分页内容
视频无法显示
图片无法显示查看: 9678|回复: 6
关于属性伤害的简单问题
在线时间231 小时
阅读权限40
帖子猥币巴士票
猥服出巡 Lv.4, 积分 824, 距离下一级还需 176 积分
武器的属性伤害怎么算啊?
比如300攻+100火的刀
和400攻的刀一样么?(怕火的怪)
白FC:3268 0859 1821
在线时间3436 小时
阅读权限80
帖子猥币巴士票
猥风八面 Lv.8, 积分 12579, 距离下一级还需 17421 积分
還要計屬性加成 及 斬味~
新fc碼: 72
在线时间6122 小时
阅读权限80
帖子猥币巴士票
猥风八面 Lv.8, 积分 11190, 距离下一级还需 18810 积分
用南蛮刀举例的话,大约20-25%是属性伤害
在线时间2523 小时
阅读权限60
帖子猥币巴士票
猥人师表 Lv.6, 积分 4251, 距离下一级还需 749 积分
两种伤害不是简单的叠加,物理伤害针对怪物的肉质(相当于怪物的物理防御力),属性伤害针对怪物的属性吸收(相当于怪物的属性防御力),总伤害是这两者计算后的值相加。在计算期间还有各种技能,武器斩味,和怪物状态等的变量加入公式中。所以我只能说,具体两把武器哪把伤害更高还是要看怪的肉质和属性吸收。
最后提醒下LZ,怪物不会有0肉质,也就是物理伤害始终能有伤害,只是大小的问题,但是属性吸收会有0吸收,也就是属性伤害可能是0,就是说若你不了解这怪的具体属性弱点的话用物理攻击高的武器总是不会错的。
愉快的开荒生活开始了
在线时间853 小时
阅读权限60
帖子猥币巴士票
猥人师表 Lv.6, 积分 2133, 距离下一级还需 2867 积分
补充一下,所谓“怕火”也有程度不一样的,就算是一个怪身上,有怕一点的部位也有很怕的部位。LZ这不是一个小学生游戏,思维也要有点深度。
在线时间856 小时
阅读权限50
帖子猥币巴士票
猥言大义 Lv.5, 积分 1299, 距离下一级还需 701 积分
楼主,给你举例。这些东西都是要伤害计算器根据不同的武器,不同的招式,打不同的部位来算的,因为某个部位的肉质和属性耐性不同
这个图就是在加匠的情况下,打黑丝龙的头部,太刀踏步斩的一刀下去,top10伤害的武器排名及具体伤害构成
(51.42 KB, 下载次数: 33)
17:23 上传
在线时间378 小时
阅读权限60
帖子猥币巴士票
猥人师表 Lv.6, 积分 2099, 距离下一级还需 2901 积分
楼主只要了解,怪物弱点,然后带上相对应的属性去讨伐就可以了,不必纠结伤害
属性流派什么的,攻击速度的片手跟双剑,最合适。其他武器请选择纯高攻击的
喜欢华丽的话,当然是物理+对应的弱点属性讨伐,画面华丽的很
试过风化武器,去打弱龙的,就知道强大的地方了。。。封龙武器果然不是盖的
WiiU首发纪念【稀有成就】
WiiU首发纪念
常客【普通成就】
《我的业余生活》从前有一个论坛叫TGBUS…(在线时间超过1000小时)
水元素【普通成就】
水、H2O、みず、water,额...总之怎么叫都行了
(累计发帖1000即可解锁)
水精灵【稀有成就】
我很喜欢水,因为这就是我存在的意义...(累计发帖10000即可解锁)
小千金的癖好【普通成就】
作为大型玩具公司董事长女儿的我,只有在给小樱做漂亮衣服的时候,才能让我体会到作为一个有钱人的好处 (在猥皮大本营的加油站充过5汽油)
成就猎人Rank.C【稀有成就】
随便玩玩就拿到这么多了,SO EASY,妈妈再也不用担心我的成就 (获得累计超过10个成就--不包括负面成就)
浮云爱好者【普通成就】
一朵,两朵,三朵,呵呵呵… (累计获得1000朵浮云)
铜质奖杯【普通成就】
好歹有个名次,哈哈哈哈哈(曾在论坛任意板块内组织的活动中获得第三名)
银质奖杯【稀有成就】
差点就是第一名了! --不甘心的菲尼如是说(曾在论坛任意板块内组织的活动中获得第二名)
成就猎人Rank.D【普通成就】
你已经踏上了成就收集的不归路,5个成就怎么可能满足你的需求,继续努力吧! (获得累计超过5个成就--不包括负面成就)
略疼【稀有成就】
(续《我的业余生活》2)我在那里…消磨了大量的… (在线时间超过5000小时)
Powered by

我要回帖

更多关于 属性同好会 的文章

 

随机推荐