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

java-尝试获取在屏幕上绘制的每个随机圆的x,y坐标,第1张

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

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

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

解决方法:

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

当他们单击此按钮时:

从中取样颜色:

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

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

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

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

if(randomHeight > maxY && < minY){

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

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

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

总结

以上是内存溢出为你收集整理的java-尝试获取在屏幕上绘制的每个随机圆的x,y坐标全部内容,希望文章能够帮你解决java-尝试获取在屏幕上绘制的每个随机圆的x,y坐标所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1095224.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存