Kai Rechtern
- Forum-Beiträge: 2
18.10.2012, 17:42:43 via Website
18.10.2012 17:42:43 via Website
Hi,
ich versuche mich gerade an meinem ersten Android-Spiel. Es soll ein einfaches Jump & Run werden, in dem die Figur von alleine läuft und der per antippen des Bildschirms ein Sprung ausgeführt werden soll. Es soll ein 2D Spiel werden, daher arbeite ich mit Canvas.
Mein Problem:
Ich weiẞ nicht so recht wie ich die Figur vernünftig Springen lasse. Bisher hab ich es nur mit 2 Threads hinbekommen. Einmal der Haupt-Thread der das Spiel laufen lässt und ein zweiter der gestartet wird um die Figur springen zu lassen. Ein Thread lässt die Figur quasi nach vorne laufen, während ein zweiter bei Bedarf die Figur gleichzeitig springen lässt.
Der JumpThread arbeitet leider mit sleep, was denke ich nicht so schön ist.
Hoffe ihr könnt mir weiterhelfen.
Gruß
ich versuche mich gerade an meinem ersten Android-Spiel. Es soll ein einfaches Jump & Run werden, in dem die Figur von alleine läuft und der per antippen des Bildschirms ein Sprung ausgeführt werden soll. Es soll ein 2D Spiel werden, daher arbeite ich mit Canvas.
Mein Problem:
Ich weiẞ nicht so recht wie ich die Figur vernünftig Springen lasse. Bisher hab ich es nur mit 2 Threads hinbekommen. Einmal der Haupt-Thread der das Spiel laufen lässt und ein zweiter der gestartet wird um die Figur springen zu lassen. Ein Thread lässt die Figur quasi nach vorne laufen, während ein zweiter bei Bedarf die Figur gleichzeitig springen lässt.
Der JumpThread arbeitet leider mit sleep, was denke ich nicht so schön ist.
1public class JumpThread extends Thread{
2
3 private boolean mjumpUp;
4 private boolean mjumpDown;
5 private OldmanView oldView;
6 private boolean run;
7
8 public JumpThread(OldmanView old){
9 oldView = old;
10 run = true;
11 mjumpUp = false;
12 mjumpDown = false;
13 }
14
15 @Override
16 public void run() {
17 // TODO Auto-generated method stub
18 while(run){
19 while(mjumpUp == true){
20 oldView.getThread().jump();
21 try {
22 sleep(1);
23 } catch (InterruptedException e) {
24 // TODO Auto-generated catch block
25 e.printStackTrace();
26 }
27 }
28
29 while(mjumpDown == true){
30 oldView.getThread().jumpDown();
31 try {
32 sleep(1);
33 } catch (InterruptedException e) {
34 // TODO Auto-generated catch block
35 e.printStackTrace();
36 }
37 }
38 }
39 }
40
41 public void setRunning(boolean run){
42 this.run = run;
43 }
44
45 public void setJump(boolean mjump){
46 this.mjumpUp = mjump;
47 }
48
49 public void setJumpDown(boolean mjumpDown){
50 this.mjumpDown = mjumpDown;
51 }
52}
2
3 private boolean mjumpUp;
4 private boolean mjumpDown;
5 private OldmanView oldView;
6 private boolean run;
7
8 public JumpThread(OldmanView old){
9 oldView = old;
10 run = true;
11 mjumpUp = false;
12 mjumpDown = false;
13 }
14
15 @Override
16 public void run() {
17 // TODO Auto-generated method stub
18 while(run){
19 while(mjumpUp == true){
20 oldView.getThread().jump();
21 try {
22 sleep(1);
23 } catch (InterruptedException e) {
24 // TODO Auto-generated catch block
25 e.printStackTrace();
26 }
27 }
28
29 while(mjumpDown == true){
30 oldView.getThread().jumpDown();
31 try {
32 sleep(1);
33 } catch (InterruptedException e) {
34 // TODO Auto-generated catch block
35 e.printStackTrace();
36 }
37 }
38 }
39 }
40
41 public void setRunning(boolean run){
42 this.run = run;
43 }
44
45 public void setJump(boolean mjump){
46 this.mjumpUp = mjump;
47 }
48
49 public void setJumpDown(boolean mjumpDown){
50 this.mjumpDown = mjumpDown;
51 }
52}
1public void jump(){
2
3 synchronized(holder){
4 oldmanBottom -= gravity;
5 oldmanTop -= gravity;
6
7 if(oldmanBottom <= (ground - 50)){
8 gravity = 1;
9 jThread.setJumpDown(true);
10 jThread.setJump(false);
11 }
12 }
13 }
14
15 public void jumpDown(){
16
17 synchronized(holder){
18 oldmanBottom += gravity;
19 oldmanTop += gravity;
20
21 if(oldmanBottom == ground){
22 jThread.setJumpDown(false);
23 }
24 }
25
26 }
2
3 synchronized(holder){
4 oldmanBottom -= gravity;
5 oldmanTop -= gravity;
6
7 if(oldmanBottom <= (ground - 50)){
8 gravity = 1;
9 jThread.setJumpDown(true);
10 jThread.setJump(false);
11 }
12 }
13 }
14
15 public void jumpDown(){
16
17 synchronized(holder){
18 oldmanBottom += gravity;
19 oldmanTop += gravity;
20
21 if(oldmanBottom == ground){
22 jThread.setJumpDown(false);
23 }
24 }
25
26 }
Hoffe ihr könnt mir weiterhelfen.
Gruß
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.