Skip to content

Commit ac497d5

Browse files
committed
Sprite erweitert(Spritesheets können nun benutzt werden)
1 parent e6b5913 commit ac497d5

2 files changed

Lines changed: 138 additions & 15 deletions

File tree

src/ea/Sprite.java

Lines changed: 117 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,11 @@
22

33
import java.util.ArrayList;
44

5+
import android.graphics.Bitmap;
56
import android.graphics.Canvas;
7+
import android.graphics.Matrix;
68
import android.graphics.Paint;
9+
import android.graphics.Rect;
710
import ea.internal.collision.BoxCollider;
811
import ea.internal.collision.Collider;
912
import ea.internal.collision.ColliderGroup;
@@ -17,6 +20,21 @@ public class Sprite extends Raum
1720

1821
private boolean animiert = true;
1922

23+
private boolean spiegelX;
24+
private boolean spiegelY;
25+
26+
private boolean istSpriteSheet;
27+
private Bild spriteSheet;
28+
29+
private int spriteBreite;
30+
private int spriteHoehe;
31+
private int zeilen, spalten;
32+
private int aktuellesFrame;
33+
private long frameTicker;
34+
private int framePeriode;
35+
private Rect sourceRect;
36+
private int anzahlBilder;
37+
2038
static
2139
{
2240
sprites = new ArrayList<Sprite>();
@@ -48,6 +66,7 @@ public Sprite(float x, float y, String ...bilder)
4866
this.bilder = new Bild[bilder.length];
4967

5068
animiert = bilder.length > 1;
69+
istSpriteSheet = false;
5170

5271
for(int i = 0; i < bilder.length; i++)
5372
{
@@ -62,20 +81,56 @@ public Sprite(String ...bilder)
6281
this(0, 0, bilder);
6382
}
6483

84+
public Sprite(String spriteSheet, float x, float y, int fps, int anzahlBilder)
85+
{
86+
super.position = new Punkt(x, y);
87+
88+
istSpriteSheet = true;
89+
this.spriteSheet = new Bild(x, y, spriteSheet);
90+
91+
this.anzahlBilder = anzahlBilder;
92+
spriteBreite = this.spriteSheet.bild().getWidth() / anzahlBilder;
93+
spriteHoehe = this.spriteSheet.bild().getHeight();
94+
sourceRect = new Rect(0, 0, spriteBreite, spriteHoehe);
95+
framePeriode = 1000 / fps;
96+
frameTicker = 0l;
97+
98+
animiert = true;
99+
100+
sprites.add(this);
101+
}
102+
65103
public boolean animiert()
66104
{
67105
return animiert;
68106
}
69107

70108
public void animationsSchritt(int runde)
71109
{
72-
if (runde % intervall != 0) {
110+
if(!istSpriteSheet)
111+
{
112+
if (runde % intervall != 0) {
73113
return;
114+
}
115+
if (aktuelle == bilder.length - 1) {
116+
aktuelle = 0;
117+
} else {
118+
aktuelle++;
119+
}
74120
}
75-
if (aktuelle == bilder.length - 1) {
76-
aktuelle = 0;
77-
} else {
78-
aktuelle++;
121+
else
122+
{
123+
if (System.currentTimeMillis() > frameTicker + framePeriode)
124+
{
125+
frameTicker = System.currentTimeMillis();
126+
aktuellesFrame++;
127+
if (aktuellesFrame >= anzahlBilder) {
128+
aktuellesFrame = 0;
129+
}
130+
}
131+
132+
this.sourceRect.left = aktuellesFrame * spriteBreite;
133+
this.sourceRect.right = this.sourceRect.left + spriteBreite;
79134
}
80135
}
81136

@@ -87,11 +142,49 @@ public void intervallSetzen(int intervall)
87142
@Override
88143
public void zeichnen(Canvas g, BoundingRechteck r)
89144
{
90-
Paint p = new Paint();
145+
146+
if(!istSpriteSheet)
147+
{
148+
Matrix m = new Matrix();
149+
Paint p = new Paint();
150+
Bitmap bild = bilder[aktuelle].bild();
151+
152+
if(spiegelX && spiegelY) {
153+
m.preScale(-1, -1);
154+
} else if(spiegelX) {
155+
m.preScale(-1, 1);
156+
} else if(spiegelY) {
157+
m.preScale(1, -1);
158+
} else {
159+
m.preScale(1, 1);
160+
}
161+
162+
Bitmap endBild = Bitmap.createBitmap(bild, 0, 0, bild.getWidth(), bild.getHeight(), m, false);
163+
164+
g.drawBitmap(endBild, position.x, position.y, p);
165+
}
91166

92-
//g.drawBitmap(bilder[aktuelle].bild(), position.x, position.y, p);
93-
bilder[aktuelle].zeichnen(g, r);
94-
167+
else
168+
{
169+
Rect destRect = new Rect(position.x(), position.y(), position.x() + spriteBreite, position.y() + spriteHoehe);
170+
171+
Matrix m = new Matrix();
172+
Paint p = new Paint();
173+
174+
if(spiegelX && spiegelY) {
175+
m.preScale(-1, -1);
176+
} else if(spiegelX) {
177+
m.preScale(-1, 1);
178+
} else if(spiegelY) {
179+
m.preScale(1, -1);
180+
} else {
181+
m.preScale(1, 1);
182+
}
183+
184+
Bitmap endBild = Bitmap.createBitmap(spriteSheet.bild(), 0, 0, spriteSheet.bild().getWidth(), spriteSheet.bild().getHeight(), m, false);
185+
186+
g.drawBitmap(endBild, sourceRect, destRect, null);
187+
}
95188
}
96189

97190
@Override
@@ -111,4 +204,19 @@ public Collider erzeugeCollider() {
111204
}
112205
return gc;
113206
}
207+
208+
public void setzeSpiegelX(boolean s)
209+
{
210+
spiegelX = s;
211+
}
212+
213+
public void setzeSpiegelY(boolean s)
214+
{
215+
spiegelY = s;
216+
}
217+
218+
public int aktuellesFrameGeben()
219+
{
220+
return aktuellesFrame;
221+
}
114222
}

src/ea/android/GameActivity.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,7 @@
22

33
import java.util.Random;
44

5-
import ea.*;
6-
import ea.internal.gra.Zeichenebene;
7-
import ea.internal.gra.Zeichner;
85
import android.app.Activity;
9-
import android.app.NotificationManager;
106
import android.content.Context;
117
import android.content.pm.ActivityInfo;
128
import android.content.res.Configuration;
@@ -16,10 +12,17 @@
1612
import android.hardware.SensorManager;
1713
import android.os.Bundle;
1814
import android.os.Vibrator;
19-
import android.support.v4.app.NotificationCompat;
2015
import android.util.Log;
2116
import android.view.KeyEvent;
22-
import android.view.MotionEvent;
17+
import android.widget.Toast;
18+
import ea.Farbe;
19+
import ea.Kamera;
20+
import ea.Knoten;
21+
import ea.Manager;
22+
import ea.Raum;
23+
import ea.Ticker;
24+
import ea.internal.gra.Zeichenebene;
25+
import ea.internal.gra.Zeichner;
2326

2427
enum BildOrientierung
2528
{
@@ -148,6 +151,18 @@ public void tickerStoppen()
148151
manager.anhalten(this);
149152
}
150153

154+
public void nachrichtAnzeigen(final String text, final int dauer)
155+
{
156+
runOnUiThread(new Runnable() {
157+
158+
@Override
159+
public void run() {
160+
Toast.makeText(GameActivity.this, text, dauer).show();
161+
162+
}
163+
});
164+
}
165+
151166
public static GameActivity get()
152167
{
153168
return instanz;

0 commit comments

Comments
 (0)