美文网首页
会换位置的小球?

会换位置的小球?

作者: doit_7b21 | 来源:发表于2019-12-05 10:02 被阅读0次

这里没有废话之先上效果图。

uxwfe-xwobm.gif

这里没有废话之思路描述

1.确定小圆所在大圆的圆心及轨迹
2.根据圆心及小圆所在位置确定运动轨迹
3.跟着轨迹High起来

这里没有废话之核心代码

 @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        //小球分布圆
        paint.reset();
//        paint.setStyle(Paint.Style.STROKE);
//        canvas.drawCircle(w / 2, h / 2, w / 3, paint);
        paint.setStyle(Paint.Style.FILL);
        paint.setShader(linearGradient[linearGradient.length - 1]);
        //中心小圆
        canvas.drawCircle(ballPos[ballPos.length - 1][0], ballPos[ballPos.length - 1][1], sballradius, paint);
        //画小球
        for (int i = 0; i < ballCount; i++) {
            float x = ballPos[i][0];
            float y = ballPos[i][1];
            paint.setShader(linearGradient[i]);
            paint.setStyle(Paint.Style.FILL);
            canvas.drawCircle(x, y, sballradius, paint);
//            if (i < paths.length) {
//                paint.setShader(null);
//                paint.setStyle(Paint.Style.STROKE);
//                canvas.drawPath(paths[i], paint);
//            }
        }
        //开始动画
        float l;
        switch (step) {
            case 0:
                pathMeasure.setPath(paths[0], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * offset, pos, tan);
                ballPos[0][0] = pos[0];
                ballPos[0][1] = pos[1];
                pathMeasure.setPath(paths[ballPos.length - 1], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * (1 - offset1), pos, tan);
                ballPos[ballPos.length - 1][0] = pos[0];
                ballPos[ballPos.length - 1][1] = pos[1];
//                Log.e("fx","l-->"+l+"pos"+Arrays.toString(pos)+"offset-->"+offset1);
                break;
            case 1:
//                pathMeasure.setPath(paths[step], false);
//                l = pathMeasure.getLength();
//                pathMeasure.getPosTan(l * offset, pos, tan);
//                ballPos[step][0] = pos[0];
//                ballPos[step][1] = pos[1];
////                Log.e("fx_1","l-->"+l+"pos"+Arrays.toString(pos)+"offset-->"+offset);
//                pathMeasure.setPath(paths[step - 1], false);
//                l = pathMeasure.getLength();
//                pathMeasure.getPosTan(l * (1-offset1), pos, tan);
//                ballPos[step - 1][0] = pos[0];
//                ballPos[step - 1][1] = pos[1];
//                Log.e("fx_1","l-->"+l+"pos"+Arrays.toString(pos)+"offset1-->"+offset1);
            case 2:
            case 3:
            case 4:
            case 5:
                pathMeasure.setPath(paths[step], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * offset, pos, tan);
                ballPos[step][0] = pos[0];
                ballPos[step][1] = pos[1];
                pathMeasure.setPath(paths[step - 1], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * (1 - offset1), pos, tan);
                ballPos[step - 1][0] = pos[0];
                ballPos[step - 1][1] = pos[1];
                break;
            case 6:
                pathMeasure.setPath(paths[step], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * offset, pos, tan);
                ballPos[step][0] = pos[0];
                ballPos[step][1] = pos[1];
                pathMeasure.setPath(paths[0], false);
                l = pathMeasure.getLength();
                pathMeasure.getPosTan(l * (1 - offset1), pos, tan);
                ballPos[0][1] = pos[1];
                break;


        }
//
        Log.i("fx_ondraw_" + (ballPos.length - 1), Arrays.toString(ballPos[ballPos.length - 1]));
        Log.i("fx_ondraw_0", Arrays.toString(ballPos[0]));
        Log.i("fx_ondraw_1", Arrays.toString(ballPos[1]) + "step-->" + step);
    }

github传送门

这里没有废话之总结

1.已知半径,角度 求圆上任意一点。
2.path 及 pathmeasure用法
3.贝塞尔曲线
4.ValueAnimator

这里没有废话之鸣谢

感谢https://www.aconvert.com/cn/帮我转了gif。

相关文章

  • 会换位置的小球?

    这里没有废话之先上效果图。 这里没有废话之思路描述 1.确定小圆所在大圆的圆心及轨迹2.根据圆心及小圆所在位置确定...

  • 实现小球在弹射前的拉伸特效和动态障碍物特效

    当前我们实现小球弹射时,会先用鼠标点击小球,然后移动鼠标,当松开鼠标时,小球会弹射向鼠标松开的位置。我们按住小球的...

  • 小球规律运动面试题

    需求 20个球 每个球都有三对坐标 3对坐标 小球起始位置,小球第二次的位置,小球第三次的位置。 所有小球,同时运...

  • JS实现一连串元素跟随鼠标效果

    思路 当鼠标移动时,获取到鼠标的位置,将第一个小球的位置设置为鼠标的位置,然后将剩余小球都设为其前一个小球的位置,...

  • 会换位置的小球粘起来了?

    这里没有废话之先上效果图。 这里没有废话之思路描述 1.找到小球圆心连线的中点画贝塞尔曲线,没错就是这么简单 这里...

  • 射线拓展

    小球撞击砖块,小球和砖块都必须有碰撞体,当小球撞击到砖块之后,小球消失,在小球原本位置再生成一个小球,点击鼠标继续...

  • 知识回顾第一期

    一、作品效果1、小球朝着某个方向移动,碰到舞台边缘反弹。2、小猫追着小球跑,当小猫碰到小球后,小球随机变换位置继续...

  • day12作业

    使用Pygame,做一个小游戏。鼠标点击的位置生成一个随机大小、颜色和运动方向的小球,小球碰撞后,半径大的小球吃掉...

  • 少儿编程Scratch第四讲,小猫追球游戏,附带程序

    小猫追球游戏 游戏规则:通过鼠标控制小球位置,然后小猫在短时间内滑行到小球位置。 游戏程序 舞台 添加一个舞台背景...

  • CSP-2018-3之碰撞的小球

    设计思路: 对象Ball中主要定义两个方法:碰到墙和小球方向改变,并且初始化小球的初始位置及小球的初始化方向;2....

网友评论

      本文标题:会换位置的小球?

      本文链接:https://www.haomeiwen.com/subject/xmblgctx.html