这几天写精灵,感觉写的乱七八糟的。有些想实现的东西没实现,感觉怪怪的,其实有些东西,各位同学可以自己按照自己的想法把我的精灵扩充一下,扩展的接口留给同学们了,发挥一下想象力吧~~~~嘿嘿~~
废话不多说,直接把模板放上去~~~~
DynamicSprite s; NormalPlay a; int xx = 150; /** *专门把Paint拿出来是因为Change事件每次通过修改paint来实现各种变化 * **/ Paint aa = new Paint(); public View1(Context context) { super(context); /** * 实例化可移动精灵对象,如果不想精灵移动,可实例化StaticSprite。 * 其中R.draw.monster就是想加载的图像,后面的布尔变量是精灵是否可播放 * */ s = new DynamicSprite(R.drawable.monster, true); /** * * 加载资源 * */ s.load(context.getResources()); /** * * 如果精灵可播放,则调用该方法,将图像分割,其中第一个参数对应行数, * 第二个对应列数 * */ s.splitImage(4, 4); /** * * 实例化播放事件对象 * */ a = new NormalPlay(); /** * *添加播放事件 * **/ s.addPlays(a); /** *修改播放事件,其实,也可以不加,不同的播放事件可以作为Play不同的子类 * **/ a.setSpeed(0.1f); /** *精灵工作前要start()一下 * **/ s.start(); new Thread(this).start(); } public void draw(Canvas canvas) { super.draw(canvas); /** * 绘制精灵,精灵的Canvas和Paint * */ s.onDraw(canvas, aa); } /** * */ @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_MOVE || event.getAction() == MotionEvent.ACTION_DOWN) { float x = event.getX(); float y = event.getY(); /** * * 播放事件在精灵start之后可以随意修改,只要这个播放事件还在play就可以 * **/ a.setSpeed(a.getSpeed() + 0.1f); /** * * Move对象在精灵start之后就可以随便加 * */ s.addMoves(new StraightMove((int) x, (int) y, Move.MOVE_TO)); } return super.onTouchEvent(event); } public void run() { while (true) { try { Thread.sleep(100); if (xx > 1) { xx--; /** * * 添加透明度变化事件,这个透明度是不断降低的 * */ s.addChanges(new AlphaChange(xx)); } postInvalidate(); } catch (InterruptedException e) { e.printStackTrace(); } } }
现在解释下这个东西啦~~~这段代码实现的是一个可以不断变透明的精灵,你的鼠标点哪儿,他就跑到哪儿,而且会越点播放的越快。