您好,我正在制作一款会在屏幕上创建随机圆圈的游戏.随机创建的圆的值将为红色或绿色.我的问题是,我不仅希望能够确定用户何时单击了一个圆圈,还可以确定用户最终单击了哪个圆圈(红色或绿色).这是下面的代码.我的主要问题是试图找到要绘制的圆的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坐标所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)