- Forum-Beiträge: 71
12.03.2014, 13:05:44 via Website
12.03.2014 13:05:44 via Website
eigentlich recht simple Frage: wie erkenne ich eine Kollision zwischen zwei ImageViews?
Ich habe einen Spieler der auf einer Map entlang läuft und pro Map je zwei Objekte in Form von ImageViews die der Spieler einsammeln soll, und ich möchte also erkennen, ob er dieses Objekt berührt(egal von welcher Seite). Ich habe von Spieler eine x und y-Koordinate, gleiches gilt für die beiden Objekte, also jeweils die Koordinaten, von denen aus gezeichnet wird, hier noch die wichtigen Code-Teile:
2 public int maxX=700,maxY=370,minX=0,minY=158;
3
4 ImageView stone1,stone2;
5
6 public int extraStones=0;
7
8 public int randomX1,randomX2,randomY1,randomY2;
2 stone1.setImageResource(R.drawable.volcano_currency_small);
3 stone2 = new ImageView(GameActivity.this);
4 stone2.setImageResource(R.drawable.volcano_currency_small);
5
6 layout = (RelativeLayout) findViewById(R.id.RelativeLayout1);
7 layout.setOnClickListener(this);
8 RelativeLayout.LayoutParams lp =
9 new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
10 lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
11 layout.addView(stone1,lp);
12 layout.addView(stone2,lp);
2 randomX2=rmd.nextInt((maxX-minX)+1)+minX;
3 randomY1=rmd.nextInt((maxY-minY)+1)+minY;
4 randomY2=rmd.nextInt((maxY-minY)+1)+minY;
5 stone1.setX(randomX1);
6 stone1.setY(randomY1);
7 stone2.setX(randomX2);
8 stone2.setY(randomY2);
(für jede Map wird für jedes Objekt je eine zufällige x und y-Koordinate generiert)
Was ich schon getestet habe, war eine Idee von mir, nämlich:
2 {
3 if(xPos>randomX1&&xPos<randomX1+56&&yPos>randomY1&&yPos<randomY1+44)
4 {
5 stone1.setVisibility(ImageView.INVISIBLE);
6 extraStones+=3;
7 }
8
9 if(xPos>randomX2&&xPos<randomX2+56&&yPos>randomY2&&yPos<randomY2+44)
10 {
11 stone2.setVisibility(ImageView.INVISIBLE);
12 extraStones+=3;
13 }
14 }
Was ich dann noch versuchen wollte, war ein Snippet aus dem Internet, bis ich dann festgestellt habe, dass es nicht Java sondern JavaFX ist...
Dieser Snippet sah so aus:
2 {
3 Bounds oneLb = one.getLayoutBounds();
4 Bounds twoLb = two.getLayoutBounds();
5
6 // Bild2 liegt rechts von Bild1
7 if( (oneLb.getMinX() + oneLb.getWidth()) <= twoLb.getMinX() )
8 {
9 return false;
10 }
11
12 // Bild2 liegt unter den Bild1
13 if( (oneLb.getMinY() + oneLb.getHeight()) <= twoLb.getMinY() )
14 {
15 return false;
16 }
17
18 // Bild2 liegt links von Bild1
19 if( (twoLb.getMinX() + twoLb.getWidth()) <= oneLb.getMinX() )
20 {
21 return false;
22 }
23
24 // Bild2 liegt über den Bild3
25 if( (twoLb.getMinY() + twoLb.getHeight()) <= oneLb.getMinY() )
26 {
27 return false;
28 }
29
30 // wenn man hier angekommen ist, dann kollidieren die BBoxen
31 return true;
32 }
Oder habt ihr andere Ideen?
LG
Florian S.
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.