Ich verbau mir glaub ich grade immer mehr..
komme gerade nicht mehr mit klar..
Wenn ich den Konstruktor entferne kommen andere Errors?
Wegen Callback das ist meine GameView..
1package com.crazy.lazydragon;
2
3import java.util.ArrayList;
4import java.util.List;
5import java.util.Random;
6
7import android.annotation.SuppressLint;
8import android.content.Context;
9import android.graphics.Bitmap;
10import android.graphics.BitmapFactory;
11import android.graphics.Canvas;
12import android.graphics.Color;
13import android.graphics.Paint;
14import android.graphics.RectF;
15import android.graphics.Typeface;
16import android.view.MotionEvent;
17import android.view.SurfaceHolder;
18import android.view.SurfaceHolder.Callback;
19import android.view.SurfaceView;
20
21public class GameView extends SurfaceView {
22 private List<Sprite> spriteList = new ArrayList<Sprite>();
23 private List<Integer> spriteListNum = new ArrayList<Integer>();
24 private SurfaceHolder surfaceHolder;
25 private Bitmap bmp;
26 private Bitmap livesPicture;
27 private GameLoopThread theGameLoopThread;
28 private boolean createSprites = true;
29 private long lastClick;
30 private int currentColorNum;
31 private int lives = 4;
32 private int score = 0;
33 private Paint paintRed, paintBlue, paintGreen, paintYellow;
34 private Paint currentColor;
35 private String scoreString;
36 private String livesString;
37 private float density;
38 private MainActivity theGameActivity = new MainActivity();
39 private boolean transparency = false;
40
41 public GameView(Context context) {
42 super(context);
43 livesPicture = BitmapFactory.decodeResource(getResources(),
44 R.drawable.lives1);
45 Random rnd = new Random();
46 theGameActivity = (MainActivity) context;
47 setColors();
48 currentColorNum = rnd.nextInt(4);
49 theGameLoopThread = new GameLoopThread(this);
50 surfaceHolder = getHolder();
51 surfaceHolder.addCallback(new SurfaceHolder.Callback() {
52
53 public void surfaceDestroyed(SurfaceHolder holder) {
54 theGameLoopThread.setRunning(false);
55 boolean retry = true;
56 while (retry) {
57 try {
58 theGameLoopThread.interrupt();
59 theGameLoopThread.join();
60 retry = false;
61 } catch (InterruptedException e) {
62 }
63 }
64
65 }
66
67 public void surfaceCreated(SurfaceHolder holder) {
68 theGameLoopThread.setRunning(true);
69 if (theGameLoopThread.getState() == theGameLoopThread
70 .getState().NEW) {
71 theGameLoopThread.start();
72 }
73 }
74
75 public void surfaceChanged(SurfaceHolder holder, int format,
76 int width, int height) {
77 }
78 });
79 }
80
81 @SuppressLint("WrongCall")
82 @Override
83 public void draw(Canvas canvas) {
84 canvas.drawColor(Color.DKGRAY);
85 if (createSprites == true) {
86 initialSprites();
87 }
88 for (Sprite sprite : spriteList) {
89 sprite.onDraw(canvas);
90 }
91 if (currentColorNum == 0) {
92 drawLines(paintBlue, canvas);
93 } else if (currentColorNum == 1) {
94 drawLines(paintRed, canvas);
95 } else if (currentColorNum == 2) {
96 drawLines(paintGreen, canvas);
97 } else if (currentColorNum == 3) {
98 drawLines(paintYellow, canvas);
99 }
100 final int fontSize = (int) (25 * density);
101 int yTextPos = (int) (25 * density);
102 Typeface font = Typeface.create("Arial", Typeface.NORMAL);
103
104 Paint paint = new Paint();
105 paint.setColor(Color.WHITE);
106 paint.setTypeface(font);
107 paint.setTextSize(fontSize);
108 paint.setAntiAlias(true);
109 scoreString = String.valueOf(score);
110 int x = (canvas.getWidth() * 5 / 7);
111 final String text = "Score: " + scoreString;
112 canvas.drawText(text, x, yTextPos, paint);
113 drawLives(canvas, paint);
114
115 }
116
117 private void createSprite(int index) {
118 Bitmap bmp = null;
119 switch (index) {
120 case 0:
121 bmp = BitmapFactory.decodeResource(getResources(),
122 R.drawable.alienspriteblue);
123 break;
124 case 1:
125 bmp = BitmapFactory.decodeResource(getResources(),
126 R.drawable.alienspritered);
127 break;
128 case 2:
129 bmp = BitmapFactory.decodeResource(getResources(),
130 R.drawable.alienspritegreen);
131 break;
132 case 3:
133 bmp = BitmapFactory.decodeResource(getResources(),
134 R.drawable.alienspriteyellow1);
135 break;
136 }
137 Sprite sprite = new Sprite((Callback) this, bmp);
138 spriteList.add(sprite);
139 spriteListNum.add(index);
140 }
141
142 private void initialSprites() {
143 for (int i = 0; i < 4; i++) {
144 for (int j = 0; j < 3; j++)
145 createSprite(i);
146 }
147 createSprites = false;
148 }
149
150 private void rndCreateSprite() {
151 Random rnd = new Random(System.currentTimeMillis());
152 int i = rnd.nextInt(4);
153 createSprite(i);
154 }
155
156 @Override
157 public boolean onTouchEvent(MotionEvent event) {
158 if (System.currentTimeMillis() - lastClick > 300) {
159 lastClick = System.currentTimeMillis();
160 synchronized (getHolder()) {
161 for (int i = spriteList.size() - 1; i >= 0; i--) {
162 Sprite sprite = spriteList.get(i);
163 if (sprite.isTouched(event.getX(), event.getY())) {
164 if (currentColorNum == spriteListNum.get(i)) {
165 score++;
166 } else {
167 lives--;
168 if (lives == 0) {
169 theGameActivity.onGameOver();
170 }
171 }
172 if (score == 3)
173 lives++;
174 rndCreateSprite();
175 removeSprite(i);
176 changeColor();
177 break;
178 }
179 }
180 }
181 }
182 return true;
183 }
184
185 private void removeSprite(int index) {
186 spriteList.remove(index);
187 spriteListNum.remove(index);
188 }
189
190 public void setColors() {
191 Paint paintRed = new Paint();
192 paintRed.setARGB(255, 236, 27, 36);
193 this.paintRed = paintRed;
194 Paint paintBlue = new Paint();
195 paintBlue.setARGB(255, 36, 72, 204);
196 this.paintBlue = paintBlue;
197 Paint paintGreen = new Paint();
198 paintGreen.setARGB(255, 34, 177, 76);
199 this.paintGreen = paintGreen;
200 Paint paintYellow = new Paint();
201 paintYellow.setARGB(255, 255, 242, 0);
202 this.paintYellow = paintYellow;
203 }
204
205 public void drawLines(Paint lineColor, Canvas canvas) {
206 int lineWidth = (int) (10 * density);
207 int screenHeight = getHeight();
208 int screenWidth = getWidth();
209 canvas.drawRect(0, 0, lineWidth, getHeight(), lineColor);
210 canvas.drawRect(0, getHeight() - lineWidth, screenWidth, screenHeight,
211 lineColor);
212 canvas.drawRect(screenWidth - lineWidth, 0, screenWidth, screenHeight,
213 lineColor);
214 currentColor = lineColor;
215 }
216
217 public void changeColor() {
218 Random rnd = new Random();
219 int index = rnd.nextInt(spriteListNum.size());
220 this.currentColorNum = spriteListNum.get(index);
221 switch (index) {
222 case 0:
223 currentColor = paintBlue;
224 break;
225 case 1:
226 currentColor = paintRed;
227 break;
228 case 2:
229 currentColor = paintGreen;
230 break;
231 case 3:
232 currentColor = paintYellow;
233 break;
234 }
235
236 }
— geändert am 01.03.2014, 15:51:12
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.