繁体   English   中英

试图获取在屏幕上绘制的每个随机圆的x,y坐标

[英]Trying to get the x, y coordinate of each random circle that is drawn on the screen

您好,我正在制作一款会在屏幕上创建随机圆圈的游戏。 随机创建的圆的值将为红色或绿色。 我的问题是,我不仅希望能够确定用户何时单击了一个圆圈,还可以确定用户最终单击了哪个圆圈(红色或绿色)。 这是下面的代码。 我的主要问题是试图找到要绘制的圆的x和y

public class DrawingView extends View {



    public DrawingView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub

    }
    RectF rectf = new RectF(0, 0, 200, 0);

    private static final int w = 100;
    public static int lastColor = Color.BLACK;
    private final Random random = new Random();
    private final Paint paint = new Paint();
    private final int radius = 230;
    private final Handler handler = new Handler();
    public static int redColor = Color.RED;
    public static int greenColor = Color.GREEN;
    int randomWidth =(int) (random.nextInt(Math.abs(getWidth()-radius/2)) + radius/2f);
    int randomHeight = (random.nextInt((int) Math.abs((getHeight()-radius/2 + radius/2f))));


    private final Runnable updateCircle = new Runnable() {
        @Override 
        public void run() {
            lastColor = random.nextInt(2) == 1 ? redColor : greenColor;
            paint.setColor(lastColor);
            invalidate();
            handler.postDelayed(this, 1000);

        }
    };



    @Override 
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        handler.post(updateCircle);
    }

    @Override 
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        handler.removeCallbacks(updateCircle);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        // your other stuff here

        canvas.drawCircle(randomWidth, randomHeight + radius/2f, radius, paint);
    }



    @Override
    public boolean onTouchEvent (MotionEvent event) {

        double r = Math.sqrt(((randomWidth^2)+(randomHeight^2)));
        int maxX = (int) (((randomWidth)*(randomWidth)) + r);
        int minX = (int) ((((randomWidth)*(randomWidth))) - r);
        int maxY = (int) (((randomHeight)*(randomHeight)) + r);
        int minY = (int) ((((randomHeight)*(randomHeight))) - r);

        public int xCoordinateOfRedColor(){
            if(redColor == lastColor){
                if(randomWidth > maxX && < minX){
                    event.getX();
                }
            };
        }
        public int yCoordinateOfRedColor(){
            if(redColor == lastColor){
                if(randomHeight > maxY && < minY){
                    event.getX();
                }
            };
        }
        if(redColor == lastColor){
            if(randomHeight > maxY && < minY){
                event.getY();
            }
        };
        if(greenColor == lastColor){

        };
        if(greenColor == lastColor){

        };

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN : 
                randomWidth = (int) event.getX();
                randomHeight = (int) event.getY();

                invalidate(); 
                break;
            case MotionEvent.ACTION_POINTER_UP :


                break;
        }

        return true;

    }


}

我不知道即时消息是很近还是很远。

有很多方法可以解决此类问题。 您可以尝试列出所有内容,让自己发疯。 最强大的功能之一是在创建每个形状时为其分配唯一的颜色。 使用该颜色查找形状。 换一种说法...

当他们单击此按钮时:

在此处输入图片说明

从中取样颜色:

在此处输入图片说明

保持哈希表从这些唯一的颜色到形状对象引用。 让所有形状在您从未放在屏幕上的隐藏位图上绘制其独特的颜色。 用户单击时,在隐藏位图上的xy处查找颜色。 通过哈希图运行该颜色,您可以引用它们单击的形状。 现在,您不必担心重叠或什至使用与圆形不同的形状。 这不仅为您提供了形状的x和y,而且还为您提供了有关该形状的所有信息。

当然,要使它起作用,您必须为形状创建自己的类。 为了说明的目的,我使独特的颜色非常鲜明。 实际上,您可以增加一个整数。 可以通过构造函数来增加它,也可以通过工厂方法来注入它。

它足够强大,即使在渲染3D时也可以使用。 只需保持可见和隐藏位图同步即可。 事实证明这很容易,因为您只需重用相同的呈现代码。 循环绘制每种形状,并要求其在您提交的位图上用独特的颜色进行绘制。 只要没有其他会改变颜色的效果(阴影,照明,光线跟踪),该效果就可以使用。 确保将其关闭。

顺便说一句,我不这样认为:

if(randomHeight > maxY && < minY){

按照您的想法去做。 当我要测试两个值之间是否存在某种关系时,我使用:

if(minY <= randomHeight && randomHeight <= maxY){

因为它让我想起了3≤x≤15的数学不等式。

我不确定是否会遇到问题,但是如何保留绘制的圆的列表(最后绘制的列表在列表的开头),以及当用户单击某处时您遍历该列表并每次检查该点是否在屏幕上单击属于这个圈子? 第一次发生这种情况将对应于包含单击点的最后绘制的圆。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM