Benutzer-Werkzeuge

Webseiten-Werkzeuge


api:documentation:spiele:worldtransformations

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
api:documentation:spiele:worldtransformations [2021/05/30 23:45] Martin Pabstapi:documentation:spiele:worldtransformations [2021/12/29 11:29] (aktuell) – Externe Bearbeitung 127.0.0.1
Zeile 118: Zeile 118:
  
 **Vielen Dank an Jürgen Horzella für die Programmvorlage!** \\ \\  **Vielen Dank an Jürgen Horzella für die Programmvorlage!** \\ \\ 
-Steuere den grünen Helden mit den **Pfeiltasten**!+Steuere den Helden mit den **Pfeiltasten**!
  
 <HTML> <HTML>
Zeile 128: Zeile 128:
  
 public class Spiel extends Actor { public class Spiel extends Actor {
-   Rectangle [] plattform; + 
-    +   Text punkteAnzeige = new Text(20, 20, 60, "");
-   Circle [] star;+
    double punkte = 0;    double punkte = 0;
  
-   Rectangle spielfigur;+   Sprite spielfigur;
    double vx;    double vx;
    double vy;    double vy;
Zeile 139: Zeile 138:
    double gravity = 0.4;    double gravity = 0.4;
    double jump = -12;    double jump = -12;
-   double speed = 3;+   double speed = 5;
        
  
    Circle bombe;    Circle bombe;
-   double mx; +   double mx = 300 // Mittelpunkt der Kreisbahn 
-   double my; +   double my = 300
-   double r; +   double r = 100  // Radius der Kreisbahn 
-   double t; +   double t = 0
-   double w;+   double w = 0.05 // Winkelgeschwindigkeit
  
    Shape standingOn;    Shape standingOn;
  
    Group plattforms = new Group();    Group plattforms = new Group();
 +   Group stars = new Group();
  
    public Spiel() {    public Spiel() {
Zeile 159: Zeile 159:
       plattforms.add(ground);       plattforms.add(ground);
  
-      for(int i = 1; i < 10; i++) { +      for(int i = 1; i < 6; i++) { 
-         plattforms.add(new Rectangle(100 + 250 * i, 600 - 70 * i, 200, 10));+         plattforms.add(new Rectangle(100 + 250 * i, 600 - 120 * i, 200, 10));
       }       }
              
-      star new Circle[4]+      for(int i 0i < 40; i++) { 
-      star[0] = new Circle(30040010); +         Sprite star = new Sprite(Random.randdouble(-5001500)Random.randint(300, 500), SpriteLibrary.Plattforms176);  
-      star[1] = new Circle(400, 300, 10); +         stars.add(star);
-      star[2] = new Circle(500, 300, 10)+
-      star[3] = new Circle(10045010); +
-      for(int i = 0; i <= 3; i++) { +
-         star[i].setFillColor(Color.yellow);+
       }       }
              
-      spielfigur = new Rectangle(2004002040); +      spielfigur = new Sprite(500100SpriteLibrary.Characters_10);
-      spielfigur.setFillColor(Color.green);+
       vx = 0;       vx = 0;
       vy = 0;       vy = 0;
Zeile 185: Zeile 180:
       bombe = new Circle(mx, my, 20);       bombe = new Circle(mx, my, 20);
       bombe.setFillColor(Color.red);       bombe.setFillColor(Color.red);
 +
 +      punkteAnzeige.setStatic(true);
 +      punkteAnzeige.setFillColor(Color.white);
 +      punkteAnzeige.setBorderColor(Color.darkcyan);
    }    }
        
Zeile 197: Zeile 196:
  
       if(spielfigur.collidesWith(bombe)) {       if(spielfigur.collidesWith(bombe)) {
-         spielfigur.moveTo(200400);+         spielfigur.moveTo(500100); 
 +      } 
 +             
 +      Shape[] collidingStars = stars.getCollidingShapes(spielfigur); 
 +      for(Shape star : collidingStars) { 
 +         star.destroy(); 
 +         Sound.playSound(Sound.short_bell); 
 +         punkte++; 
 +         punkteAnzeige.setText(punkte);
       }       }
              
 +      if(isKeyDown(Key.ArrowUp) && standingOn != null) {
 +         vy = jump;
 +      }
 +
 +      if(isKeyDown(Key.ArrowRight)) {
 +         vx = speed;
 +      } else if(isKeyDown(Key.ArrowLeft)) {
 +         vx = -speed;
 +      } else {
 +         vx = 0;
 +      }
  
       if(standingOn != null) {       if(standingOn != null) {
          if(!spielfigur.collidesWith(standingOn)) {          if(!spielfigur.collidesWith(standingOn)) {
             standingOn = null;             standingOn = null;
 +            ay = gravity;
          }          }
       }       }
  
-      if(standingOn == null) { +      Shape[] collidingPlatforms = plattforms.getCollidingShapes(spielfigur); 
-         Shape[] collidingPlatforms = plattforms.getCollidingShapes(spielfigur); +      for(Shape platform : collidingPlatforms) { 
-         for(Shape platform : collidingPlatforms) { +         
-             +         if(platform != standingOn{
-            spielfigur.moveBackFrom(platform, true)+
-   +
             Direction d = spielfigur.directionRelativeTo(platform);             Direction d = spielfigur.directionRelativeTo(platform);
             switch(d) {             switch(d) {
                case top :                 case top : 
 +                  spielfigur.moveBackFrom(platform, true);
                   standingOn = platform;                   standingOn = platform;
 +                  vy = 0;
 +                  ay = 0;
                   break;                   break;
                case bottom :                 case bottom : 
Zeile 222: Zeile 242:
                   spielfigur.moveBackFrom(platform, false);                   spielfigur.moveBackFrom(platform, false);
                case left :                 case left : 
 +                  vx = -4;
 +                  spielfigur.moveBackFrom(platform, false);
 +                  spielfigur.move(vx, vy);
 +                  break;
                case right :                 case right : 
-                  vx *-1;+                  vx = 4;
                   spielfigur.moveBackFrom(platform, false);                   spielfigur.moveBackFrom(platform, false);
-                  spielfigur.move(0, vy);+                  spielfigur.move(vx, vy);
                   break;                   break;
-            }+            } 
          }          }
 +         
 +         
 +      }
  
 +   }
 +}</script>
 +
 +</div>
 +
 +</HTML>
 +
 +
 +===== Zyklisch-parallaktisches Scrollen =====
 +{{ youtube>mRgC7BJcK78?large }}
 +
 +<HTML>
 +
 +<div class="java-online" style="height: 450px; width: 100%" data-java-online="{'withBottomPanel': true, 'id': 'CyclicParalacticScroller', 'speed': 'max'}">
 +
 +<script type="text/plain" title="CyclicBackgroundTest.java">
 +new CyclicBackgroundTest();
 +
 +class CyclicBackgroundTest extends Actor {
 +   
 +   CyclicBackground cb1;
 +   CyclicBackground cb2;
 +   CyclicBackground cb3;
 +   
 +   int time = 0;
 +
 +   CyclicBackgroundTest() {
 +      cb1 = new CyclicBackground(new Sprite(0, 0, SpriteLibrary.Background, 2));
 +      cb2 = new CyclicBackground(new Sprite(0, 0, SpriteLibrary.Background, 1));
 +      cb3 = new CyclicBackground(new Sprite(0, 0, SpriteLibrary.Background, 0));
 +   }
 +
 +   public void act() {
 +      time++;
 +      cb1.setPosition(-time, 0);
 +      cb2.setPosition(-time * 2, 200);
 +      cb3.setPosition(-time * 4, 400);
 +   }
 +
 +}
 +</script>
 +<script type="text/plain" title="CyclicBackground.java">
 +class CyclicBackground extends Group {
 +   
 +   Sprite[] images;
 +   double spriteWidth;
 +
 +   CyclicBackground(Sprite image) {
 +      spriteWidth = image.getWidth();
 +      int count = Math.ceil(getWorld().getWidth() / spriteWidth) + 1;
 +      images = new Sprite[count];
 +      image.defineCenterRelative(0, 0);
 +      images[0] = image;
 +      add(image);
 +      for(int i = 1; i < count; i++) {
 +         images[i] = image.copy();
 +         add(images[i]);
       }       }
 +   }
  
-      if(standingOn != null) {  +   void setPosition(double left, double top) { 
-         vy = 0+      if(left > 0
-         ay = 0; +         left -Math.ceil(-left / spriteWidth) * spriteWidth;
-      } +
-      else +
-         ay gravity;+
       }       }
              
-      for(int i = 0; i <= 3; i++) { +      double x = left + Math.floor(-left / spriteWidth) * spriteWidth; 
-         if(spielfigur.collidesWith(star[i])) { +      for(int i = 0; i < images.length; i++){ 
-            punkte++; +         images[i].moveTo(xtop); 
-            star[i].moveTo(55); +         x +spriteWidth;
-         +
-      } +
-       +
-      if(isKeyDown(Key.ArrowUp) && standingOn != null) { +
-         vy jump;+
       }       }
 +   }
  
-      if(isKeyDown(Key.ArrowRight)) { 
-         vx = speed; 
-      } else if(isKeyDown(Key.ArrowLeft)) { 
-         vx = -speed; 
-      } else { 
-         vx = 0; 
-      } 
  
-   } 
 } }
 </script> </script>
Zeile 266: Zeile 336:
  
 </HTML> </HTML>
 +
 +
api/documentation/spiele/worldtransformations.1622411115.txt.gz · Zuletzt geändert: 2021/12/29 11:29 (Externe Bearbeitung)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki