Advertisement
Guest User

Untitled

a guest
Jul 28th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.29 KB | None | 0 0
  1. import java.util.*;
  2. import javax.microedition.lcdui.game.*;
  3. import javax.microedition.lcdui.*;
  4.  
  5. public class Pixel extends Sprite {
  6.    
  7.     public double posX;
  8.     public double posY;
  9.     public double speedX = 0;
  10.     public double speedY = 0;
  11.     final int JUMPSPEED = -20;
  12.  
  13.     /**
  14.      * Konstruktor für Objekte der Klasse Platform
  15.      */
  16.     public Pixel(Image img, double x, double y) {
  17.         super(img, 16, 16);
  18.         posX = x;
  19.         posY = y;
  20.     }
  21.    
  22.    
  23.     public void accelerate(int leftright) {
  24.         speedX = leftright * 5;
  25.     }
  26.    
  27.     public void move(int width, int height, Vector platforms, int ms) {
  28.        
  29.         double fraction = 15*ms/1000.0d;
  30.         //die diesen zug zurueckzulegende distanz.
  31.         double moveY = speedY*fraction;
  32.         double moveX = speedX*fraction;
  33.        
  34.        
  35.         if (!collisionDetection(platforms, moveX, moveY)) {
  36.             //wenn kollision stattdfand, wurde posY schonvon der kollisionsberechnung neu gesetzt
  37.             posY += moveY;
  38.         }
  39.         posX += moveX;
  40.          
  41.         //linke wand
  42.         if (posX < 0)
  43.             posX = width;
  44.        
  45.  
  46.         //rechte wand
  47.         else if (posX > width - 1)
  48.             posX = 0;
  49.        
  50.        
  51.         //Gavitation.
  52.         speedY += 2*fraction;
  53.     }
  54.    
  55.     public boolean collisionDetection(Vector platforms, double moveX, double moveY) {
  56.         // Kollisionen interessieren nicht, wenn pixel nach oben fliegt.
  57.         if (speedY > 0) {
  58.            for (int i = 0; i < platforms.size(); i++) {
  59.                 Platform p = (Platform) platforms.elementAt(i);
  60.                 //y-Distanz von pixel zu plattform
  61.                 double distanceY = p.posY - posY;
  62.                 //wenn die plattform ueberm pixel ist oder die distanz
  63.                 //groesser als die zurueckzulegende strecke ist, abbruch.
  64.                 if (distanceY < 0 || distanceY > moveY)
  65.                     continue;
  66.                 //der bruchteil der zeit dieses frames, nach dem
  67.                 //der pixel auf der hoehe der plattform angekommen is
  68.                 double fraction2 = distanceY /moveY;
  69.                 //die position des pixels, wenn er auf der hoehe der plattform ankommt
  70.                 double newPosX = posX + moveX * fraction2;;
  71.                 //die position ist nicht auf der plattform, also keine kollision, abbruch
  72.                 if (newPosX <= p.posX || newPosX >= (p.posX + p.size))
  73.                     continue;
  74.                 // lösche platform ohne kollision wenn fake
  75.                 if(p.type == 2) {
  76.                     platforms.removeElementAt(i);
  77.                     continue;
  78.                 }
  79.                 //bewege pixel bis zur kollision und dann um die verbleibende zeit in die neue richtung
  80.                 posY = posY + JUMPSPEED * fraction2 - moveY * (1-fraction2);
  81.                 //loesche Platform wenn breakable, dann kollision
  82.                 if(p.type == 1)
  83.                     platforms.removeElementAt(i);
  84.                
  85.                 //neue geschwindigkeit
  86.                 speedY = JUMPSPEED;
  87.                 //eine weitere kollision kann nicht gefunden werden, daher kompletter abbruch.
  88.                 return true;
  89.             }
  90.         }
  91.         return false;
  92.     }
  93.    
  94.    
  95.    
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement