Spiel - Mücke (brauche Hilfe beim Tier hinzufügen)

  • Antworten:108
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 18:32:42 via Website

Hallo Liebe Leute,
Bin neu hier

Um dieses spiel geht es.

Mückenfang:
Kurzbeschreibung

Wie viele Mücken zerquetscht worden sind
Je mehr punkte = höhere Runde = besseren Highscore
**Je zerquetschte Mücke 100-300 punkte (je nach Schwierigkeitsgrad) gutgschrieben**

**Um dies geht es:
HILFE BITTE, oder gebt mir einen Tipp**



1. Ich möchte gerne ein Tier z.B. Fliege oder Elefant hinzufügen, aber
so dass da Punkte abgezogen werden, so um die 500Punkte!!!



2. Es werden derzeit die Mücken gezählt, die ich in dieser Runde
erwischt hab um eine Runde weiter zu kommen, also es hebt von 0 an
und es zählt bis 10 rauf, bis ich diese Runde geschafft habe. Ich
will das aber genau umgekehrt, also das es von 10 runterzählt auf 0.


Ich habe schon ca. 3-4 Tage lang studiert und probiert aber irgendwie geht das nicht

**Hier mal das ganze, wo ich eure Hilfe brauch:**
Für die Tiere die erscheinen sollen (eineMueckeAnzeigen) und auch den onClick, wo die Punkte abgezogen werden hab ich mal hervorgehoben.

Bei dem anderen mit dem rückwärts zählen, brauche ich eure hilfe, weil ich glaube mal, das ich den code dann anders schreiben muss

Hoffe der code-tag funktioniert

1package de.androidnewcomer.mueckenfang;
2
3import java.util.Date;
4import java.util.Random;
5
6import android.app.Activity;
7import android.app.Dialog;
8import android.media.MediaPlayer;
9import android.os.Bundle;
10import android.os.Handler;
11import android.view.Gravity;
12import android.view.View;
13import android.view.View.OnClickListener;
14import android.view.ViewGroup;
15import android.view.ViewGroup.LayoutParams;
16import android.view.animation.Animation;
17import android.view.animation.Animation.AnimationListener;
18import android.view.animation.AnimationUtils;
19import android.widget.FrameLayout;
20import android.widget.ImageView;
21import android.widget.TextView;
22
23public class GameActivity extends Activity implements OnClickListener, Runnable {
24
25 private static final String FLIEGE = "FLIEGE";
26 private static final int INTERVALL_MS = 50;
27 private static final long HOECHSTALTER_MS = 2000;
28 private static final int MUECKEN_BILDER[][] = {
29 {R.drawable.muecke_nw, R.drawable.muecke_n, R.drawable.muecke_no},
30 {R.drawable.muecke_w, R.drawable.muecke, R.drawable.muecke_o},
31 {R.drawable.muecke_sw, R.drawable.muecke_s, R.drawable.muecke_so}};
32 private static final String HIMMELSRICHTUNGEN[][] = {
33 {"nw", "n", "no"},
34 {"w", "", "o"},
35 {"sw", "s", "so"}};
36
37 private boolean spielLaeuft;
38 private int runde;
39 private int punkte;
40 private int muecken;
41 private int gefangeneMuecken;
42 private int zeit;
43 private float massstab;
44 private Random zufallsgenerator = new Random();
45 private ViewGroup spielbereich;
46 private Handler handler = new Handler();
47 private MediaPlayer mp;
48 private int frame;
49 private int schwierigkeitsgrad;
50 **private ImageView muecke;
51 private Random rnd;
52 private Object fliege;**
53
54 @Override
55 protected void onCreate(Bundle savedInstanceState) {
56 super.onCreate(savedInstanceState);
57 setContentView(R.layout.game);
58 massstab = getResources().getDisplayMetrics().density;
59 spielbereich = (ViewGroup) findViewById(R.id.spielbereich);
60 mp = MediaPlayer.create(this, R.raw.summen);
61 schwierigkeitsgrad = getIntent().getIntExtra("schwierigkeitsgrad", 0);
62 spielStarten();
63 }
64
65 private void spielStarten() {
66 spielLaeuft = true;
67 runde = 0;
68 punkte = 0;
69 starteRunde();
70 }
71
72 private void starteRunde() {
73 runde = runde +1;
74 muecken = runde * (10 + schwierigkeitsgrad*10);
75 gefangeneMuecken = 0;
76 frame = 0;
77 zeit = 60;
78 bildschirmAktualisieren();
79 handler.postDelayed(this, INTERVALL_MS);
80 }
81
82 private void bildschirmAktualisieren() {
83 TextView tvPunkte = (TextView) findViewById(R.id.points);
84 tvPunkte.setText(Integer.toString(punkte));
85 TextView tvRunde = (TextView) findViewById(R.id.round);
86 tvRunde.setText(Integer.toString(runde));
87 TextView tvTreffer = (TextView) findViewById(R.id.hits);
88 tvTreffer.setText(Integer.toString(gefangeneMuecken));
89 TextView tvZeit = (TextView) findViewById(R.id.time);
90 tvZeit.setText(Integer.toString(zeit));
91 FrameLayout flTreffer = (FrameLayout) findViewById(R.id.bar_hits);
92 FrameLayout flZeit = (FrameLayout) findViewById(R.id.bar_time);
93 LayoutParams lpTreffer = flTreffer.getLayoutParams();
94 lpTreffer.width = Math.round(massstab * 300 * Math.min(gefangeneMuecken, muecken) /muecken);
95 LayoutParams lpZeit = flZeit.getLayoutParams();
96 lpZeit.width = Math.round(massstab * zeit * 300 / 60 );
97 }
98
99 private void zeitHerunterzaehlen() {
100 zeit = zeit -1;
101 float zufallszahl = zufallsgenerator.nextFloat();
102 double wahrscheinlichkeit = muecken * 1.5 / 60;
103 if(wahrscheinlichkeit > 1) {
104 eineMueckeAnzeigen();
105 if(zufallszahl < wahrscheinlichkeit-1) {
106 eineMueckeAnzeigen();
107 }
108 } else {
109 if(zufallszahl < wahrscheinlichkeit) {
110 eineMueckeAnzeigen();
111 }
112 }
113 mueckenVerschwinden();
114 bildschirmAktualisieren();
115 }
116
117
118 private void mueckenBewegen() {
119 int nummer=0;
120 while(nummer < spielbereich.getChildCount()) {
121 ImageView muecke = (ImageView) spielbereich.getChildAt(nummer);
122 int vx = (Integer) muecke.getTag(R.id.vx);
123 int vy = (Integer) muecke.getTag(R.id.vy);
124 // und nun bewegen...
125 FrameLayout.LayoutParams params = (android.widget.FrameLayout.LayoutParams) muecke.getLayoutParams();
126 params.leftMargin += vx*runde;
127 params.topMargin += vy*runde;
128 muecke.setLayoutParams(params);
129 nummer++;
130 }
131 }
132
133 private void mueckenVerschwinden() {
134 int nummer=0;
135 while(nummer < spielbereich.getChildCount()) {
136 ImageView muecke = (ImageView) spielbereich.getChildAt(nummer);
137 Date geburtsdatum = (Date) muecke.getTag(R.id.geburtsdatum);
138 long alter = (new Date()).getTime() - geburtsdatum.getTime();
139 if(alter > HOECHSTALTER_MS) {
140 spielbereich.removeView(muecke);
141 } else {
142 nummer++;
143 }
144 }
145 }
146
147 private boolean pruefeSpielende() {
148 if(zeit == 0 && gefangeneMuecken < muecken) {
149 gameOver();
150 return true;
151 }
152 return false;
153 }
154
155 private void gameOver() {
156 setResult(punkte);
157 Dialog dialog = new Dialog(this, android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
158 dialog.setContentView(R.layout.gameover);
159 dialog.show();
160 spielLaeuft = false;
161 }
162
163 private boolean pruefeRundenende() {
164 if(gefangeneMuecken >= muecken) {
165 starteRunde();
166 return true;
167 }
168 return false;
169 }
170
171 private void eineMueckeAnzeigen() {
172
173 **if(rnd.nextFloat() <0.05) {
174 muecke.setImageResource(R.drawable.fliege);
175 muecke.setTag(R.id.tier,fliege);
176 } else {
177 muecke.setImageResource(R.drawable.muecke);
178 }**
179
180 int breite = spielbereich.getWidth();
181 int hoehe = spielbereich.getHeight();
182 int muecke_breite = (int) Math.round(massstab*50);
183 int muecke_hoehe = (int) Math.round(massstab*42);
184 int links = zufallsgenerator.nextInt(breite - muecke_breite );
185 int oben = zufallsgenerator.nextInt(hoehe - muecke_hoehe);
186
187 // Mücke erzeugen
188 ImageView muecke = new ImageView(this);
189 muecke.setOnClickListener(this);
190 muecke.setTag(R.id.geburtsdatum, new Date());
191
192 // Bewegungsvektor erzeugen
193 int vx;
194 int vy;
195 do {
196 vx = zufallsgenerator.nextInt(3)-1;
197 vy = zufallsgenerator.nextInt(3)-1;
198 } while(vx==0 && vy==0);
199
200 muecke.setTag(R.id.vx, new Integer(vx));
201 muecke.setTag(R.id.vy, new Integer(vy));
202
203 setzeBild(muecke, vx, vy);
204
205 // Geschwindigkeitskorrektur für schräge Mücken
206 double faktor = 1.0;
207 if(vx!=0 && vy!=0) {
208 faktor = 0.70710678;
209 }
210
211 vx = (int) Math.round(massstab*faktor*vx);
212 vy = (int) Math.round(massstab*faktor*vy);
213
214 // Mücke anzeigen
215 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(muecke_breite, muecke_hoehe);
216 params.leftMargin = links;
217 params.topMargin = oben;
218 params.gravity = Gravity.TOP + Gravity.LEFT;
219 spielbereich.addView(muecke, params);
220
221 // Summen starten
222 mp.seekTo(0);
223 mp.start();
224 }
225
226
227 private void setzeBild(ImageView muecke, int vx, int vy) {
228 // setzen des richtigen Bildes mit dem zweidimensionalen Array
229 muecke.setImageResource(MUECKEN_BILDER[vy+1][vx+1]);
230
231 // alternativ: setzen über Himmelsrichtungen und Bildname
232 //muecke.setImageResource(getResources().getIdentifier("muecke_"+HIMMELSRICHTUNGEN[vy+1][vx+1], "drawable", getPackageName()));
233 }
234
235 @Override
236 public void onClick(View muecke) {
237 **if(muecke.getTag(R.id.tier)== FLIEGE) {
238 punkte -= 500;
239 } else {
240 gefangeneMuecken++;
241 punkte += 100 + schwierigkeitsgrad*100;**
242 }
243 bildschirmAktualisieren();
244 mp.pause();
245 Animation animationTreffer = AnimationUtils.loadAnimation(this, R.anim.treffer);
246 animationTreffer.setAnimationListener(new MueckeAnimationListener(muecke));
247 muecke.startAnimation(animationTreffer);
248 muecke.setOnClickListener(null);
249
250
251 }
252
253 private class MueckeAnimationListener implements AnimationListener {
254 private View muecke;
255 public MueckeAnimationListener(View m) {
256 muecke = m;
257 }
258 @Override
259 public void onAnimationEnd(Animation arg0) {
260 handler.post(new Runnable() {
261 @Override
262 public void run() {
263 spielbereich.removeView(muecke);
264 }
265 });
266 }
267
268 @Override
269 public void onAnimationRepeat(Animation arg0) {
270 }
271
272 @Override
273 public void onAnimationStart(Animation arg0) {
274 }
275
276 }
277
278 @Override
279 public void run() {
280 mueckenBewegen();
281 frame++;
282 if(frame >= 1000/INTERVALL_MS) {
283 zeitHerunterzaehlen();
284 frame = 0;
285 }
286 if(!pruefeSpielende()) {
287 if(!pruefeRundenende()) {
288 handler.postDelayed(this, INTERVALL_MS);
289 }
290 }
291 }
292
293 @Override
294 protected void onDestroy() {
295 mp.release();
296 super.onDestroy();
297 }
298
299 @Override
300 protected void onPause() {
301 super.onPause();
302 handler.removeCallbacks(this);
303 }
304}


Ich sag schon mal danke im Voraus

— geändert am 06.03.2014, 19:29:14 durch Moderator

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 18:53:28 via Website

Wenn du aus einem Android Buch entwickelst, das dieses Beispiel drinnen hat, schau mal hier:
https://www.nextpit.de/de/android/forum/thread/579782/Mueckenfang-Hilfe


Ich möchte gerne ein Tier z.B. Fliege oder Elefant hinzufügen, aber so dass da Punkte abgezogen werden, so um die 500Punkte!!!
Dann mach das Doch. Wie nachlesen, im Inet suchen oder hier genauer mit Infos etc. nachfragen.

Es werden derzeit die Mücken gezählt, die ich in dieser Runde erwischt hab um eine Runde weiter zu kommen, also es hebt von 0 an und es zählt bis 10 rauf, bis ich diese Runde geschafft habe. Ich will das aber genau umgekehrt, also das es von 10 runterzählt auf 0.
Das kannst du machen indem du statt hochzählen einfach runterzählst.. (Poste die Entsprechende Stelle im Code den Langen liest niemand durch)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Andy N.
  • Forum-Beiträge: 22.375

06.03.2014, 18:59:58 via App

Hallo und herzlich willkommen bei uns im Forum :)

bitte bearbeite doch nochmal etwas deinen Threadtitel, damit andere User besser erkennen können, worum es hier geht. Hierfür einfach unter deinem ersten Beitrag auf "Bearbeiten" drücken, dann kannst du oben noch mal den Titel bearbeiten. Danke

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

Antworten
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 19:19:19 via Website

Andy N.

bitte bearbeite doch nochmal etwas deinen Threadtitel, damit andere User besser erkennen können, worum es hier geht. Hierfür einfach unter deinem ersten Beitrag auf "Bearbeiten" drücken, dann kannst du oben noch mal den Titel bearbeiten.

Danke für die nachricht aber leider funktioniert das mit dem bearbeiten überhaupt garnicht und das mit dem code-tag hat leider auch nicht funktioniert, warum?

Pascal P.

Poste die Entsprechende Stelle

Danke für den Link, aber ich habe dort auch schon durchforstet und im Internet finde ich auch nicht das richtige.

Das andere problem ist die Liste, ich weiß nicht ganz genau, was jetzt alles dazugehört für die Änderung des zählens!!!, deswegen die ganze Activity

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 19:25:16 via Website

Das musst du schon wissen. Daran sehe ich das du den Code nicht verstanden hast. Bitte Grundlagen anschauen.
Wieso haben eigentlich mehrere leute damit Probleme?
Ist es im Buch nicht genau erklärt?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Andy N.
  • Forum-Beiträge: 22.375

06.03.2014, 19:30:16 via App

Patrick M.


Danke für die nachricht aber leider funktioniert das mit dem bearbeiten überhaupt garnicht und das mit dem code-tag hat leider auch nicht funktioniert, warum?

Keine Ahnung, warum das bei dir nicht ging... Ich hab das mal für dich übernommen ;)

Viele Grüße,
Andy


OnePlus 3 (Resurrection Remix 5.8.2)
LG G Watch

Regeln | unsere Mods & Admins

Antworten
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 19:43:13 via Website

Pascal
Ich verstehe schon den Code nur bei mir ist das Problem anders. Entweder muss ich den Code komplett von vorne anfangen zum schreiben, damit ich weiß wo was und wofür es ist oder ich brauche xTage bis ich es schaffe aber ich bin momentan erst Anfänger wie du siehst

Im Buch steht nicht alles, das ist das problem, wenn es drinen stehen würde, würde ich weder übers Internet um hilfe bitten noch ca. 20Seiten bei der Suchmaschine durchforsten!!!

Andy
Danke für deine Hilfe

Ich hab den Computer neu gestartet und auch GoogleChrome, funktioniert immer noch nicht, warscheinlich weil ich die Beta-Version benutze

Ach ja, wenn der Code-Tag wiedernicht funktioniert, bitte schreibt, wie der richtig geschrieben wird!


1package de.androidnewcomer.mueckenfang;
2
3import java.util.Date;
4import java.util.Random;
5
6import android.app.Activity;
7import android.app.Dialog;
8import android.media.MediaPlayer;
9import android.os.Bundle;
10import android.os.Handler;
11import android.view.Gravity;
12import android.view.View;
13import android.view.View.OnClickListener;
14import android.view.ViewGroup;
15import android.view.ViewGroup.LayoutParams;
16import android.view.animation.Animation;
17import android.view.animation.Animation.AnimationListener;
18import android.view.animation.AnimationUtils;
19import android.widget.FrameLayout;
20import android.widget.ImageView;
21import android.widget.TextView;
22
23public class GameActivity extends Activity implements OnClickListener, Runnable {
24
25 private static final int INTERVALL_MS = 50;
26 private static final long HOECHSTALTER_MS = 2000;
27 private static final int MUECKEN_BILDER[][] = {
28 {R.drawable.muecke_nw, R.drawable.muecke_n, R.drawable.muecke_no},
29 {R.drawable.muecke_w, R.drawable.muecke, R.drawable.muecke_o},
30 {R.drawable.muecke_sw, R.drawable.muecke_s, R.drawable.muecke_so}};
31 private static final String HIMMELSRICHTUNGEN[][] = {
32 {"nw", "n", "no"},
33 {"w", "", "o"},
34 {"sw", "s", "so"}};
35
36 private boolean spielLaeuft;
37 private int runde;
38 private int punkte;
39 private int muecken;
40 private int gefangeneMuecken;
41 private int zeit;
42 private float massstab;
43 private Random zufallsgenerator = new Random();
44 private ViewGroup spielbereich;
45 private Handler handler = new Handler();
46 private MediaPlayer mp;
47 private int frame;
48 private int schwierigkeitsgrad;
49
50 @Override
51 protected void onCreate(Bundle savedInstanceState) {
52 super.onCreate(savedInstanceState);
53 setContentView(R.layout.game);
54 massstab = getResources().getDisplayMetrics().density;
55 spielbereich = (ViewGroup) findViewById(R.id.spielbereich);
56 mp = MediaPlayer.create(this, R.raw.summen);
57 schwierigkeitsgrad = getIntent().getIntExtra("schwierigkeitsgrad", 0);
58 spielStarten();
59 }
60
61 private void spielStarten() {
62 spielLaeuft = true;
63 runde = 0;
64 punkte = 0;
65 starteRunde();
66 }
67
68 private void starteRunde() {
69 runde = runde +1;
70 muecken = runde * (10 + schwierigkeitsgrad*10);
71 gefangeneMuecken = 0;
72 frame = 0;
73 zeit = 60;
74 bildschirmAktualisieren();
75 handler.postDelayed(this, INTERVALL_MS);
76 }
77
78 private void mueckenVerschwinden() {
79 int nummer=0;
80 while(nummer < spielbereich.getChildCount()) {
81 ImageView muecke = (ImageView) spielbereich.getChildAt(nummer);
82 Date geburtsdatum = (Date) muecke.getTag(R.id.geburtsdatum);
83 long alter = (new Date()).getTime() - geburtsdatum.getTime();
84 if(alter > HOECHSTALTER_MS) {
85 spielbereich.removeView(muecke);
86 } else {
87 nummer++;
88 }
89 }
90 }
91
92 private boolean pruefeSpielende() {
93 if(zeit == 0 && gefangeneMuecken < muecken) {
94 gameOver();
95 return true;
96 }
97 return false;
98 }
99
100 private boolean pruefeRundenende() {
101 if(gefangeneMuecken >= muecken) {
102 starteRunde();
103 return true;
104 }
105 return false;
106 }
107
108 private void eineMueckeAnzeigen() {
109
110 if(rnd.nextFloat() <0.05) {
111 muecke.setImageResource(R.drawable.fliege);
112 muecke.setTag(R.id.tier,fliege);
113 } else {
114 muecke.setImageResource(R.drawable.muecke);
115 }

116
117 int breite = spielbereich.getWidth();
118 int hoehe = spielbereich.getHeight();
119 int muecke_breite = (int) Math.round(massstab*50);
120 int muecke_hoehe = (int) Math.round(massstab*42);
121 int links = zufallsgenerator.nextInt(breite - muecke_breite );
122 int oben = zufallsgenerator.nextInt(hoehe - muecke_hoehe);
123
124 // Mücke erzeugen
125 ImageView muecke = new ImageView(this);
126 muecke.setOnClickListener(this);
127 muecke.setTag(R.id.geburtsdatum, new Date());
128
129 // Bewegungsvektor erzeugen
130 int vx;
131 int vy;
132 do {
133 vx = zufallsgenerator.nextInt(3)-1;
134 vy = zufallsgenerator.nextInt(3)-1;
135 } while(vx==0 && vy==0);
136
137 muecke.setTag(R.id.vx, new Integer(vx));
138 muecke.setTag(R.id.vy, new Integer(vy));
139
140 setzeBild(muecke, vx, vy);
141
142 // Geschwindigkeitskorrektur für schräge Mücken
143 double faktor = 1.0;
144 if(vx!=0 && vy!=0) {
145 faktor = 0.70710678;
146 }
147
148 vx = (int) Math.round(massstab*faktor*vx);
149 vy = (int) Math.round(massstab*faktor*vy);
150
151 // Mücke anzeigen
152 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(muecke_breite, muecke_hoehe);
153 params.leftMargin = links;
154 params.topMargin = oben;
155 params.gravity = Gravity.TOP + Gravity.LEFT;
156 spielbereich.addView(muecke, params);
157
158 }
159 private void setzeBild(ImageView muecke, int vx, int vy) {
160 muecke.setImageResource(MUECKEN_BILDER[vy+1][vx+1]);
161 }
162 @Override
163 public void onClick(View muecke) {
164 if(muecke.getTag(R.id.tier)== FLIEGE) {
165 punkte -= 500;
166 } else {
167 gefangeneMuecken++;
168 punkte += 100 + schwierigkeitsgrad*100;

169 }
170 bildschirmAktualisieren();
171 mp.pause();
172 Animation animationTreffer = AnimationUtils.loadAnimation(this, R.anim.treffer);
173 animationTreffer.setAnimationListener(new MueckeAnimationListener(muecke));
174 muecke.startAnimation(animationTreffer);
175 muecke.setOnClickListener(null);
176 }

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 19:54:21 via Website

Was willst du denn jetzt genau Wissen?

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 20:07:21 via Website

Ich will als erstes nur mal die Fliege oder den Elefanten, also das die punkte weggezählt werden.
Soviel was ich weiß wird dies über dem onClick geschehen, nur fehlt mir noch die erfahrung und so.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 20:13:24 via Website

1public void onClick(View muecke) {
2 if(muecke.getTag(R.id.tier)== FLIEGE) { //Wenn Tier ist FLiege; Das ist schon Fraglich Ist FLIEGE eine Variable ein string oder was?
3 punkte -= 500; //Hier werden 500 Punkte abgezogen; kann aber auch sein dass die Punkte dannach im minusbereich sind
4 } else {
5 gefangeneMuecken++; //Wenn es keine Fliege ist, zähle den Counter +1
6 punkte += 100 + schwierigkeitsgrad*100; //Die Punkte werden höher berechnet
7 }

Funktioniert dieser Code denn?
Wir müssen natürlich wissen, wie du die Fliege (das bild) einbindest, dann musst du an der stelle auf den Elefanten ändern.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 20:33:19 via Website

Danke erstmal fürs helfen
Und sorry für die Wartezeit der Antwort, hab mal AVD-Emulator gestartet, dauert eine weile!

Tier ist eine Id

das ich ins minus komm kann nicht passieren, weil es werden 150% mücken angezeigt, und die fliege nur 5%, und wenn ich ins minus komme, kann ich ja trotzdem weniger punkte machen(programmieren)

genau, das mit dem schwierigkeitsgrad. Da werden level 1 und 2 übersprungen (runde 3, danach runde 6 usw. wird gespielt). Dafür bekommt man mehr punkte weil die schwierigkeitsgrad schwer ist

Das mit dem einbinden, das wird entweder bei onCreadet oder etwas unterhalb von import hingeschrieben oder liege ich da falsch??


Und jetzt kommt dieses Problem von der Console, das seit 1Woche immer häufiger wird

ANDROID-EMULATOR>CONSOLE
[2014-03-07 20:29:00 - Mueckenfang7] Failed to install Mueckenfang7.apk on device 'emulator-5554!
[2014-03-07 20:29:00 - Mueckenfang7] (null)
[2014-03-07 20:29:01 - Mueckenfang7] Launch canceled!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 20:45:48 via Website

Das ist ein Emulatorfehler, teste es auf deinem Device
Poste mal die Stelle der Einbindung

— geändert am 06.03.2014, 20:46:19

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 20:51:12 via Website

das war ziemlich am schluss
Ist dieser Emulator gut, weil ich lade den gerade herunter
www.genymotion.com/


[2014-03-07 20:20:50 - Mueckenfang7] ------------------------------
[2014-03-07 20:20:50 - Mueckenfang7] Android Launch!
[2014-03-07 20:20:50 - Mueckenfang7] adb is running normally.
[2014-03-07 20:20:50 - Mueckenfang7] Performing de.androidnewcomer.mueckenfang.MueckenfangActivity activity launch
[2014-03-07 20:20:51 - Mueckenfang7] Automatic Target Mode: launching new emulator with compatible AVD 'AVD_for_Samsung_Galaxy_S4_mini'
[2014-03-07 20:20:51 - Mueckenfang7] Launching a new emulator with Virtual Device 'AVD_for_Samsung_Galaxy_S4_mini'
[2014-03-07 20:21:17 - Mueckenfang7] New emulator found: emulator-5554
[2014-03-07 20:21:17 - Mueckenfang7] Waiting for HOME ('android.process.acore') to be launched...
[2014-03-07 20:26:12 - Mueckenfang7] HOME is up on device 'emulator-5554'
[2014-03-07 20:26:12 - Mueckenfang7] Uploading Mueckenfang7.apk onto device 'emulator-5554'
[2014-03-07 20:26:19 - Mueckenfang7] Installing Mueckenfang7.apk...
[2014-03-07 20:29:00 - Mueckenfang7] Failed to install Mueckenfang7.apk on device 'emulator-5554!
[2014-03-07 20:29:00 - Mueckenfang7] (null)
[2014-03-07 20:29:01 - Mueckenfang7] Launch canceled!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 20:55:31 via Website

Sieht gut aus, ob er auch so Funktioniert kann ich nicht sagen.
Was soll das LogCat?
Dass weiss ich doch schon.
Oder kannst du die App auf denem Handy auch nicht starten

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 20:57:13 via Website

Ach nö.
Das untere war sicher unnötig.

Sag mir mal, wo bzw. wie ich die einbindung sehe bzw. erkenne.
Das bringt mir dann schon mal weiter

Antworten
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 20:59:10 via Website

Sorry. Hatte heute sehr viel stress

Nur hat für heute mein Handy den geist aufgegeben, weil mein Akku leer ist und ich bei mein freund bin und den sein Computer benutzen kann ja

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

06.03.2014, 20:59:19 via Website

Das ist die Stelle andem du deine Bilder in die ImageView Setzt. Also Funktion mücke anzeigen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

06.03.2014, 21:12:46 via Website

Ist drinen.
Hoffe das du dies meintest



[code] public class GameActivity extends Activity implements OnClickListener, Runnable {
private ImageView muecke; [code/]

1private void eineMueckeAnzeigen() {
2 if(rnd.nextFloat() <0.05) {
3 muecke.setImageResource(R.drawable.fliege);
4 muecke.setTag(R.id.tier,fliege);
5 } else {
6 muecke.setImageResource(R.drawable.fliege);

7 }
8
9 int breite = spielbereich.getWidth();
10 int hoehe = spielbereich.getHeight();
11 int muecke_breite = (int) Math.round(massstab*50);
12 int muecke_hoehe = (int) Math.round(massstab*42);
13 int links = zufallsgenerator.nextInt(breite - muecke_breite );
14 int oben = zufallsgenerator.nextInt(hoehe - muecke_hoehe);
15
16 // Mücke erzeugen
17 ImageView muecke = new ImageView(this);
18 muecke.setOnClickListener(this);
19 muecke.setTag(R.id.geburtsdatum, new Date());
20
21 // Bewegungsvektor erzeugen
22 int vx;
23 int vy;
24 do {
25 vx = zufallsgenerator.nextInt(3)-1;
26 vy = zufallsgenerator.nextInt(3)-1;
27 } while(vx==0 && vy==0);
28
29 muecke.setTag(R.id.vx, new Integer(vx));
30 muecke.setTag(R.id.vy, new Integer(vy));
31
32 setzeBild(muecke, vx, vy);
33
34 // Geschwindigkeitskorrektur für schräge Mücken
35 double faktor = 1.0;
36 if(vx!=0 && vy!=0) {
37 faktor = 0.70710678;
38 }
39
40 vx = (int) Math.round(massstab*faktor*vx);
41 vy = (int) Math.round(massstab*faktor*vy);
42
43 // Mücke anzeigen
44 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(muecke_breite, muecke_hoehe);
45 params.leftMargin = links;
46 params.topMargin = oben;
47 params.gravity = Gravity.TOP + Gravity.LEFT;
48 spielbereich.addView(muecke, params);
49
50 // Summen starten
51 mp.seekTo(0);
52 mp.start();
53 }


Programm fehler!!!!

Ich danke dir erstmal für deine Hilfe. Werde morgen sehr spät wieder on sein

Antworten
Patrick M.
  • Forum-Beiträge: 84

13.03.2014, 20:23:58 via Website

Nein, funktioniert leider nicht.
Ich habs schon 10mal herumprobiert und herumgeschrieben. Leider nichts

Hab diese funktion bei onClick und bei mueckeAnzeigen ausprobiert


Bei debug oben links wird dies angezeigt

egal ob ich diesen Code bei onClick oder mueckeAnzeigen einfüge, es kommt immer dies
Bei debug oben links wird dies angezeigt
Ich hab ca. 15mal Step Over [F6] geklickt

1. NullPointerException

Thread [<1> main] (Suspended (exception NullPointerException))
<VM does not provide monitor information>
ZygoteInit$MethodAndArgsCaller.run() line: 1108 ---->Wenn ich danach Step Over klicke, schließt sich diese Klasse und die untere öffnet sich
Dabei wird bei LogCat dies Angezeigt: D/AndroidRuntime(23932): Shutting down VM
W/dalvikvm(23932): threadid=1: thread exiting with uncaught exception (group=0x40f47ac8)
ZygoteInit.main(String[]) line: 869
NativeStart.main(String[]) line: not available [native method]


2. Android wird angehalten

Thread [<1> main] (Stepping)
<VM does not provide monitor information>
ThreadGroup.uncaughtException(Thread,Throwable)line: 690
NativeStart.main(String[]) line: not available [native method] -----> Ab da zeigt Android "Mückenfang angehalten"

egal ob ich diesen Code bei onClick oder mueckeAnzeigen einfüge, es kommt immer dies

Ich hab dem Breakpoint bei
if(rnd.next.float() <0.05) {
gesetzt

Nur leider funktionieren die SourceCode klassen nicht um die probleme genauer auf die Spur zukommen.
Ich beobachte seit gestern den Thread "Eclipse "Source not found" Fehler bei Debugging." von Superbit!!

Hier mal der LogCat
03-13 19:34:03.327: D/AndroidRuntime(23932): Shutting down VM
03-13 19:34:03.337: W/dalvikvm(23932): threadid=1: thread exiting with uncaught exception (group=0x40f47ac8)
03-13 19:34:23.989: E/AndroidRuntime(23932): FATAL EXCEPTION: main
03-13 19:34:23.989: E/AndroidRuntime(23932): java.lang.NullPointerException
03-13 19:34:23.989: E/AndroidRuntime(23932): at de.androidnewcomer.mueckenfang.GameActivity.eineMueckeAnzeigen(GameActivity.java:144)
03-13 19:34:23.989: E/AndroidRuntime(23932): at de.androidnewcomer.mueckenfang.GameActivity.zeitHerunterzaehlen(GameActivity.java:86)
03-13 19:34:23.989: E/AndroidRuntime(23932): at de.androidnewcomer.mueckenfang.GameActivity.run(GameActivity.java:179)
03-13 19:34:23.989: E/AndroidRuntime(23932): at android.os.Handler.handleCallback(Handler.java:725)
03-13 19:34:23.989: E/AndroidRuntime(23932): at android.os.Handler.dispatchMessage(Handler.java:92)
03-13 19:34:23.989: E/AndroidRuntime(23932): at android.os.Looper.loop(Looper.java:137)
03-13 19:34:23.989: E/AndroidRuntime(23932): at android.app.ActivityThread.main(ActivityThread.java:5306)
03-13 19:34:23.989: E/AndroidRuntime(23932): at java.lang.reflect.Method.invokeNative(Native Method)
03-13 19:34:23.989: E/AndroidRuntime(23932): at java.lang.reflect.Method.invoke(Method.java:511)
03-13 19:34:23.989: E/AndroidRuntime(23932): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
03-13 19:34:23.989: E/AndroidRuntime(23932): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
03-13 19:34:23.989: E/AndroidRuntime(23932): at dalvik.system.NativeStart.main(Native Method)


1//Egal welcher, immer das gleiche
2private static final String FLIEGE = "FLIEGE";
3private static final Object FLIEGE = 1;
4
5
6private void eineMueckeAnzeigen() {
7 //Anzeige
8 int breite = spielbereich.getWidth();
9 int hoehe = spielbereich.getHeight();
10 int muecke_breite = (int) Math.round(massstab*50);
11 int muecke_hoehe = (int) Math.round(massstab*42);
12 int links = zufallsgenerator.nextInt(breite - muecke_breite );
13 int oben = zufallsgenerator.nextInt(hoehe - muecke_hoehe);
14
15 //Die zwei waren drinnen, war das gleiche, sowie ohne die!
16 ImageView muecke = new ImageView(this);
17 muecke.setImageResource(R.drawable.muecke);

18
19
20//Hier ist der Code, was du für mich geschrieben hast
21 if (rnd.nextFloat() < 0.05) {
22 muecke.setImageResource(R.drawable.fliege);
23 muecke.setTag(R.id.tier,FLIEGE);
24 } else {
25 muecke.setImageResource(R.drawable.muecke);
26 }

27
28 muecke.setOnClickListener(this);
29 muecke.setTag(R.id.geburtsdatum, new Date());
30
31
32 FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(muecke_breite, muecke_hoehe);
33 params.leftMargin = links;
34 params.topMargin = oben;
35 params.gravity = Gravity.TOP + Gravity.LEFT;
36
37 spielbereich.addView(muecke, params);

1public void onClick(View muecke) {
2
3 if (muecke.getTag(R.id.tier) == FLIEGE) {
4 punkte -= 500;
5 } else {
6 gefangeneMuecken++;
7 punkte += 100;
8 }
9 bildschirmAktualisieren();
10 spielbereich.removeView(muecke);
11 }

Ich habs versucht so genau wie möglich, ab wann und wo das Problem auftritt!!
Hoffe, Ihr könnt mir da weiterhelfen, damit zumindest mal die FLIEGE angezeigt wird!!!

— geändert am 13.03.2014, 20:24:50

Antworten
impjor
  • Forum-Beiträge: 1.793

13.03.2014, 20:31:14 via App

Patrick M.
de.androidnewcomer.mueckenfang.GameActivity.eineMueckeAnzeigen(GameActivity.java:144)[/b]
Die Zeile würde ich mal als erstes angehen.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Patrick M.
  • Forum-Beiträge: 84

13.03.2014, 20:38:40 via Website

Das ist mir schon lange klar, ich hab auch ein Buch davon, nur steht da nicht wirklich was drinnen, wie man denn Code genau schreibt, das gleiche ist auf der DVD, Nichts

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

14.03.2014, 06:36:20 via App

Du musst das ja selber herausfinden. Geschenkt wird dir nix. Also erstmal die zeile anschauen .
Was könnte der fehler sein etc.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

14.03.2014, 08:48:21 via Website

Eigentlich hab ich ja alles

1private void eineMueckeAnzeigen() {
2
3 //Fliege anzeigen
4 ImageView FLIEGE = new ImageView(this);
5 FLIEGE.setImageResource(R.drawable.fliege);
6 FLIEGE.setTag(R.id.Test, new Date()); //Test = id --> Datum
7 FLIEGE.setOnClickListener(this); //Auch ohne OnClick, das gleiche problem
8
9 //Muecke anzeigen
10 ImageView muecke = new ImageView(this);
11 muecke.setImageResource(R.drawable.muecke);
12 muecke.setOnClickListener(this);
13 muecke.setTag(R.id.geburtsdatum, new Date());

14
15 //Muecke und Fliege abwechseln
16 if(rnd.nextFloat() <0.05) {
17 muecke.setImageResource(R.drawable.fliege);
18 muecke.setTag(R.id.tier,FLIEGE);
19 } else {
20 muecke.setImageResource(R.drawable.fliege);
21 }

22
23 spielbereich.addView(muecke, params);
24 }

Oder muss ich eine eigene private void für die fliege machen

— geändert am 14.03.2014, 09:36:41

Antworten
Fabian Simon
  • Forum-Beiträge: 359

14.03.2014, 13:11:26 via Website

Patrick M.
Oder muss ich eine eigene private void für die fliege machen
Warum denkst du das du ein private void vor das Object "Fliege" machen musst ?
Was macht den "private void Fliege" aus der Fliege ?
Du hast in "eineMueckeAnzeigen" doch schonmal private void verwendet...
was ist dann "eineMueckeAnzeigen"?

Antworten
Patrick M.
  • Forum-Beiträge: 84

14.03.2014, 13:52:39 via Website

Sind schon mal gute fragen Fabian.

Ich hab jetzt mal einen fehler gefunden.
Es lag an der variable Random.
Hab vergessen hinten new Random(); hinzuschreiben!!

Also
private Random rnd = new Random();

Jetzt läuft die App, aber zeigt immer wieder nur die fliege an.
Denn fehler sollte eigentlich leicht zum lösen sein.

Danke für eure Hilfe

Antworten
impjor
  • Forum-Beiträge: 1.793

14.03.2014, 14:49:00 via App

Dein Code ist auch noch etwas verwurschtelt:
Du erzeugst ein ImageView FLIEGE (sollte eigentlich kleingeschrieben werden) und nachher noch eines: muecke.

Bei einer bestimmten Wahrscheinlich setzt du dan als Bild eine Fliege und den Tag Fliege, im anderen Fall setzt du keinen Tag, aber trotzdem das selbe Bild.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Patrick M.
  • Forum-Beiträge: 84

14.03.2014, 15:38:57 via Website

Hi

Ja, irgendwie war mir dies schon bewusst das ich mich es mal vertauschen werde (ist aber nicht passiert), aber für den anfang gibts ja immer viele probleme und co

Antworten
Patrick M.
  • Forum-Beiträge: 84

15.03.2014, 09:50:46 via App

Ein paar fragen

1.Was ist der unterschied zwischen finish() und System.exit(0)

2. Ich habe 3 Activity's
Startseite, Game, GameOver

Ich hab bei GameOver 2 Button
1.Button --> zurück zur Startseite
2.Button --> App beenden

1.Button funktioniert
2.Button komme ich auch wieder zur Startseite

Ich hab bis jetzt alles durchprobiert.
Ich hab auch alle Activitys mit finish() versehen. Auch dies funktionierte nicht.
Gibts dafür etwa eine eigene funktion, dass ich zur HomeScreen komme oder sollte dies auch mit System. exit(0) funktionieren?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.03.2014, 10:47:42 via Website

1.

finish()
Call this when your activity is done and should be closed. The ActivityResult is propagated back to whoever launched you via onActivityResult().

System.exit(0)


The VM stops further execution and program will exit.
Zusetzlich benutzt man beides normalerweise nicht.
Es gibt den back Button (Hardware) an der Unterseite des Geräts, zusätzlich gibt es den Home Button, der die App beendet und zum home Screen zurückkehrt.
Du brachst dafür keine Buttons in deine App einbauen, da man mit dem Back button zur Startseite wechselt und mit dem Home btn zum HomeScreen

— geändert am 15.03.2014, 10:48:00

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

15.03.2014, 11:40:29 via App

Ist mir schon klar.
Aber ich werdes ja auch so lassen, nur meine freunde wollen die Buttons haben. Wie sollte ich dies schreiben?
Ich kann derzeit nur die Startseite wieder starten

1onClick(View v) {
2startActivity ( new Intent ( this; MueckenfangActivity.class));
3//So starte ich die Startseite

Wenn ich die App mit einem Button von GameOver oder von der Startseite aus schließen möchte.
Muss ich dann da if-else verwenden?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.03.2014, 11:43:12 via Website

Ein Finish in der onClick Methode sollte da reichen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

15.03.2014, 12:05:23 via App

Ok

Ich glaube das du mich hier etwas missverstanden hast.

GameOverActivity---->2Buttons
1.Button ----> zur Startseite
2.Button ----> App schließen

wie soll ich dies schreiben??


Brauche derzeit eure unterstützung, weil ich hab per Amazon 1Buch bestellt, aber es ist nie angekommen!!

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

15.03.2014, 12:23:09 via Website

Ok, du brauchst 2 onClick Methoden in der 1. intent zur Startseite in der 2. App schließen (finish oder Exit)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

15.03.2014, 12:28:08 via App

Aso ok. Ich dachte, das geht auch über 1 onClick methode

Antworten
impjor
  • Forum-Beiträge: 1.793

15.03.2014, 12:39:06 via Website

Du kannst auch eine OnClick-Methode nutzen und dann mit einem if-else oder switch anhand des Parameters view herausfinden, welcher Button gedrückt wurde:

void onClick(View view) {
if (view.getId() == R.id.button1) {
...
}
}

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Patrick M.
  • Forum-Beiträge: 84

15.03.2014, 12:54:33 via App

Ok
Danke, war schon mal hilfreich aber wie wird der genau geschrieben. Denn bei if und else kenne ich mich zuwenig aus!!

Ich hab mal dies so geschrieben, ist aber ein fehler
1public void onClick (View view)
2if (view.getId() == R.id.startseite) {
3startActivity(new Intent(this, MueckenfangActivity.class)); }
4return; //kein fehler
5} else {
6(view.getId() == R.id.schliessen) {
7System.exit(0);}
8return; //error
9}

Was tun, damit es funktioniert?

Antworten
impjor
  • Forum-Beiträge: 1.793

15.03.2014, 12:58:36 via Website

Das return brauchst du nicht.

Dann musst du statt else ein else if nutzen:

} else if (view.getId() ...) {
System.exit(0);
}

Statt System.exit(0) würde ich dir aber empfehlen finish() zu benutzen, wenn du unbedingt einen Beenden-Button benötigst.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Patrick M.
  • Forum-Beiträge: 84

15.03.2014, 13:06:13 via App

Ok
Danke dir

— geändert am 18.03.2014, 16:46:44

Antworten
Patrick M.
  • Forum-Beiträge: 84

18.03.2014, 16:48:21 via App

Sorry das ich manchmal nervig bin aber ich versuche seit vorgestern die GameActivity zu pausieren.
Ich hab im Forum schon onClick()x2 von Tom Com ganz durchgelesen, und desweitern hab ich auch den Link verfolgt dies impjor reingestellt hat. Auch bei developer.android hat mir nichts weitergeholfen. Ich hab auch 5-7 verschiedene Videos angesehen, was mir aber nicht wirklich geholfen hat.


Kurze Info
Es gibt 1en eigenen Button, mit dem man PAUSIEREN und FORTSETZEN kann.
Es wird weder ein Dialog noch eine neue bzw. andere Activity gestartet!!!
Es soll einfach stehen bleiben
Ich will auch Zeitverzögert nach dem pausieren, wieder starten (das werde ich warscheinlich alleine hinbekommen)

onCreated
Button Pause = (Button)findViewById(R.id.pause);
Pause.setOnClickListener(this);

Bei onClick Button hinzufügen und { onPause() } reinschreiben

Soviel weiß ich auch das ich onResume und onPause brauche
und bei public void run() onPause reinschreiben muss.

Ich hab schon alles mögliche versucht wie z.B.
1@Override
2 protected void onResume() {
3 super.onResume();
4 sensorManager.registerListener(this, sensor, SensorManager.SENSOR_DELAY_FASTEST);
5 GameActivity.class.onResume(); //oder nur GameActivity.onResume();
6 }
7
8 @Override
9 protected void onPause() {
10 super.onPause();
11 sensorManager.unregisterListener(this);
12 GameActivity.class.onPause(); //oder nur GameActivity.onPause();
13 }


Des anderen, muss ich bei run() if-else verwenden, wenn ich onPause(); reinschreiben will bzw. muss?

1@Override
2 public void run() {
3 zeitHerunterzaehlen();
4 }

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

18.03.2014, 16:54:39 via Website

Ich weiss nicht was ihr immer "mit if-else verwenden" meint.Wenn es mmit einer If bedingung geht, dann ist gut, aber wenn nicht musst du dir was anderes überlegen.
Ich habe deine Frage noch nicht richtig verstanden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

18.03.2014, 17:17:17 via App

Einen Button, der soll das spiel Pausieren und wenn ich nochmal draufdrücke bzw. klicke fortsetzten.

Wie schreibe ich dies bei onResume und bei onPause rein.

Muss ich auch bei run onPause reinschreiben?

if-else
Da meine ich, weil hier schon bei run zeitHerunterzählen steht, ob ich onPause mit if - else setzen muss

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

18.03.2014, 17:25:01 via Website

Wie im anderen Thread auch gesagt, musst du anhand deiner Spiellogik eine Pausefunktion schreiben.
Zusetzlich muss deine Pause Funktion auch onPause rein. In onResume dann wieder die Start Funktion.
und wenn es ein Button für Pause und Start sein soll, musst du abfragen, ob das Spiel gerade pausiert ist oder nicht.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

18.03.2014, 17:38:17 via Website

Ok

Das heißt dann bei protected void onPause(){ würde dies hineinkommen?
super.onPause();
sensorManager.unregisterListener(this);
GameActivity.class.onPause();
}

Aber wenn dies so stimmen sollte, will GameActivity.class.onPause(); , dass ich bei onPause static hinzufüge, dann passt aber der
sensorManager.unregisterListener(this); nirgendst mehr wo zusammen.

Wegen dem frag ich ja, wie ich ohne viel aufwand dies machen könnte

Antworten
impjor
  • Forum-Beiträge: 1.793

18.03.2014, 20:33:30 via App

Du verwechselst da was, Patrik.

Man kann eine Activity nicht einfach so pausieren.

OnPause wird von Android automatisch aufgerufen, wenn die Aktivityy "von außen" pausiert wird (andere Activity kommt in den Vordergrund), du kannst aber mit onPause deine Activity nicht pausieren.

Stattdessen brauchst du z.B. eine Variable paused, die am Anfang auf false gesetzt wird, wenn das Spiel pausiert werden soll auf true gesetzt wird und zur Fortsetzung wieder auf false.

In deiner Game-Loop (bzw. deim Handler - Konstrukt) musst du nun prüfen ob paused == false ist und die Mücken verschieben, neue erzeugen usw. und wenn paused == true ist einfach nichts davon machen.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Patrick M.
  • Forum-Beiträge: 84

18.03.2014, 21:27:14 via Website

OK
Das hab ich nach weiteren 4-5Videos selber herausgefunden. Da bin ich ja schön früh draufgekommen:O

Ok verstehe jetzt nur mal das 3/4 te.
Das heißt jetzt mal , onPause und onResume auf boolean wechseln

Des anderen mit dem onClick bin ich immer noch am nachdenken
Das einzige was mir einfällt ist mit die Werte

1private Button Pause;

1....onClick ....
2if else (muecke.getId()== R.id.pause) {
3Pause = (Button) null {
4onPause
5return true}
6
7return false}

Und wenn dies so sein sollte, wie soll ich dann den Code umschreiben???

1@Override
2 public void onClick(View muecke) {
3 if (muecke.getTag(R.id.tier) == FLIEGE) {
4 punkte -= 500 - schwierigkeitsgrad*50;
5 } else {
6 gefangeneMuecken++;
7 punkte += 100 + schwierigkeitsgrad*100;
8 }

Das mit dem umschreiben bzw. verschieben des handlers, das werde ich woll hoffentlich ohne hilfe schaffen
Bitte um Hilfe, weil ich bin hier, damit die Profis mir das so gut wie es geht erklären und beibringen können:D

— geändert am 18.03.2014, 21:31:25

Antworten
impjor
  • Forum-Beiträge: 1.793

18.03.2014, 21:55:12 via App

Also du musst bei Button-Klick einfach die Variabel setzen:
...
if (pause button gedrückt)
{
paused = true;
}
...

Deine On-Click für die Mücke könnte sich so ändern:
Patrick M.

1@Override
2 public void onClick(View muecke) {
3
4if (paused)
5{
6return; // Wenn pausiert abbrechen und nichts tun
7}
8

9
10//Rest wie bisher
11
12 if (muecke.getTag(R.id.tier) == FLIEGE) {
13 punkte -= 500 - schwierigkeitsgrad*50;
14 } else {
15 gefangeneMuecken++;
16 punkte += 100 + schwierigkeitsgrad*100;
17 }
So ähnlich auch beim Handler.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Patrick M.
  • Forum-Beiträge: 84

19.03.2014, 21:14:00 via Website

Hi,
Ich danke dir einerseits deine Hilfe impjor, nur leider funktioniert dies nicht

1. Problem

onClick
Wenn ich das 1te mal den Pause Button drücke, der normalerweise pausieren sollte, funktioniert jetzt ganz anders. Es werden Punkte dazugerechnet ohne eine Mücke zu klicken
1public void onClick(View muecke) {
2 if (muecke.getTag(R.id.tier) == FLIEGE) {
3 punkte -= 500 - schwierigkeitsgrad*50;
4 } else {
5 gefangeneMuecken++;
6 punkte += 100 + schwierigkeitsgrad*100;
7 } if (muecke.getId() == R.id.pause) {
8 onPause();
9 paused = false;
10 }[/b]


Das 2. Problem

Ich kenne mich jetzt nicht wirklich aus
Eine Variable
1private Button Pause;
2 private boolean paused;
1@Override
2 protected void onPause() {
3 super.onPause();
4 if (Pause.getId()== R.id.pause){
5 paused = false;
6 zeitHerunterzaehlen();
7 {return;}}
8 }

Kann mir wer erklären, warum der Code nicht passt und wie der dann funktionieren bzw. ausschauen sollte?
Weil das ist für MICH mal ein Thema, das was ich nicht wirklich verstehe

— geändert am 19.03.2014, 21:15:18

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

19.03.2014, 21:27:56 via App

Deine If bedingung lautet auf deutsch:
Wenn die Id des buttons gleich der Id r.id.pause ist, dann setzt die boolean auf true und zähle die zeit herunter.

Hoffentlich ist dir der fehler jetzt klar gweorden. Am Anfang weist du dem button im xml layout diese unique id zu. D.h die if bedingung oben trifft immer zu.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Patrick M.
  • Forum-Beiträge: 84

19.03.2014, 21:57:24 via Website

OK. Auf deutsch versteht man dies schon viel besser

Aber trotzdem kann ich ja bei onPause() zeitHerunterzaehlen(); hineinschreiben, nur muss ich auf return false; setzen, damit die Zeit stehen bleibt
onPause() {
if (Pause.....) {
zeitHerunterzaehlen();
return false;
}

Aber bei onClick auf return true;

Für mich ist es erstmals logisch, das es funktionieren sollte, weil bei zeitHerunterzaehlen(); -------->>> return false; steht.

Antworten
impjor
  • Forum-Beiträge: 1.793

19.03.2014, 22:03:31 via App

Patrick M.
Es werden Punkte dazugerechnet ohne eine Mücke zu klicken
1public void onClick(View muecke) {
2 if (muecke.getTag(R.id.tier) == FLIEGE) {
3 punkte -= 500 - schwierigkeitsgrad*50;
4 } else {
5 gefangeneMuecken++;
6 punkte += 100 + schwierigkeitsgrad*100;
7 }
8
9if (muecke.getId() == R.id.pause) {
10 onPause();
11 paused = false;
12 }[/b]
Das ist auch kein Wunder.
Lies dir dein erstes if mal durch: Wenn die geklickte View das Tag Fliege hat ziehe Punkte ab, sonst rechne Punkte hinzu. Wenn die geklickte View der Pause-Button ist pausiere.
Da dein Pause-Button ja kein Fliege-Tag hat bekommst du Plus-Punkte (als hättest du eine Mücke getroffen)

Dein if sollte so aussehen:
Wenn die geklickte View der Pause-Button ist pausiere und fertig. (return = Funktion onClick verlassen.)

Wenn die geklickte View den Tag Fliege hat Minuspunkte, sonst Pluspunkte.



Und nochwas: 1. Der Aufruf von onPause bewirkt nicht automatisch, dass die Activity pausiert wird. Er ist daher in deinem if fehl am Platze!

2. Entweder setzt du die Variabel paused auf *true*, wenn das Spiel pausiert wird, oder du nennst die Variable (z.B.) running und setzt sie auf *false* wenn pausiert wird.
Die Variabel paused auf *false* zu setzen, wenn das Spiel doch pausiert wird verwirrt sehr.


***Edit***:
Ich glaube, du hast return falsch verstanden.
Eine Funktion in Java kann einen Wert zurück geben (int, boolean, ein Objekt (View, ...), ...) muss aber nicht.
Der return Befehl beendet die Funktion (der Rest wird nicht mehr ausgeführt). Gibt die Funktion einen Wert zurück, muss return mit diesem Wert aufgerufen werden.
(...)
return true;

Die Funktion gibt also true zurück.
Das hat jetzt aber gar nichts mit deinem Pause-Problem zu tun.

— geändert am 19.03.2014, 22:08:42

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten