+ Antworten
Seite 1 von 3 1 2 3 LetzteLetzte
Ergebnis 1 bis 20 von 56

Thema: Slick2D Gravitation Jump Run

  1. #1
    User int Themenstarter

    Registriert seit
    27.03.2016
    Fachbeiträge
    38
    Genannt
    3 Post(s)
    Hallo,

    ich habe mit folgender Codezeile versucht einen Vektor2D zu erzeugen:

    Code:
    Vektor2D vektor = new Vector2D(x, y);
    Leider wird Vektor2D rot unterstrichen.

    Fehlermeldung:

    Vektor2d cannot be resolved to a type.

    Ich verwende Slick2D.

    Kurze Frage noch:

    Bei Vector2f bedutet das "2f" -> to float.
    Vector2D steht für to Double.
    Wofür steht z.B. Vector4f??
    Geändert von SlaterB (19.08.2016 um 14:21 Uhr) Grund: Titel

  2. #2
    User Viertel Megabyte Avatar von TMII
    Registriert seit
    19.02.2015
    Fachbeiträge
    319
    Genannt
    34 Post(s)
    Vector2f bedeutet es ist ein 2 dimensionaler Vektor des Typs floats.
    Vector4f bedeutet damit es handelt sich um einen 4 dimensionalen Vektor des Typs floats.

    Ein Vektor ist nichts anderes als ein Haufen Zahlen denen die Mathematik eine Bedeutung bei bestimmten Rechnungen beimisst.

    Die Vektorklasse wird also in etwa einfach nur so aussehen:
    Java Code:
    1.  
    2. class Vector2f {
    3.     private float x, y;
    4.  
    5.     public Vector2f(float x, float y) {
    6.         this.x = x;
    7.         this.y = y;
    8.     }
    9.  
    10.     public float getX() { return x; }
    11.  
    12.     public float getY() { return y; }
    13. }
    und das war es.

    Vielleicht noch ein paar spezielle Standard-Rechnungen für Vektoren.

  3. #3
    User Kilobyte
    Registriert seit
    13.10.2015
    Fachbeiträge
    175
    Genannt
    19 Post(s)
    Der Unterschied zwischen c und k ist geläufig?

    Vector
    Vektor

    Java bringt ein Package für Vektoren mit. Die Implementierung ist mässig und würde man heute anders machen.

    Slick2D bringt wie man auch hier sehen kann

    Slick - The 2D Library

    eine eigene Implementierung mit, die man eben für Slick2D nutzen sollte.

    Die 2 wird wohl für die Dimension stehen.
    Das f für float.

    Vector4d wird also für einen 4-Dimensionalen Vector stehen, bei dem die 4 Datenpunkte vom Typ Double sind.

  4. #4
    User int Themenstarter

    Registriert seit
    27.03.2016
    Fachbeiträge
    38
    Genannt
    3 Post(s)
    Es geht darum, das ich diesen Code implementieren möchte:

    https://books.google.at/books?id=dsc...echnen&f=false

    Siehe Listing 6.7

    Da in diesem Code Beispiel mit double Zahlen gerechnet wird, benötige ich einen Vektor der mit double zu recht kommt also kann ich nur einen Vector2D nehmen.
    Im beispielcode wird ein einfacher Vector verwendet. Leider funktioniert dieser auch nicht bei mir, wird ebenfalls rot unterstrichen.

    Was muss ich importieren, damit ich den Vector2D verwenden kann?

    MfG

  5. #5
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    Das Buch bezieht sich auf dieses "Greenfoot". Anscheinend hat da mal jemand eine Vektor-Klasse geschrieben, die in zig verschiedenen Variationen im Web rumgeistert. Man findet "die" mit sowas wie https://www.google.de/search?q=vector+"Poul+Henriksen"

    Aber bevor du da jetzt irgendeine kopierst und damit die 1001. Version davon in die Welt setzt, solltest du vielleicht sagen (oder dir selbst klar werden), was du vorhast. Diese Gravitation willst du ja nicht "für sich" implementieren. Wenn du irgend eine Library verwendest, wie Slick, LWJGL oder sonstwas, ist da wahrscheinlich schon eine Vector-Klasse dabei. Notfalls vecmath oder JOML nehmen.

  6. #6
    User Viertel Megabyte Avatar von TMII
    Registriert seit
    19.02.2015
    Fachbeiträge
    319
    Genannt
    34 Post(s)
    Ich kann das Buch unter dem Link nicht lesen ("Seitenbeschränkung anzeigbarer Seiten überschritten"), deshalb weiß ich nicht worum es geht.

    Nach der Doku von Slick2D
    Vector2f (Slick - The 2D Library)
    gibt es eine Vector2f (mit c (!) geschrieben) Klasse im Package org.newdawn.slick.geom.Vector2f.
    Eine Vector2D Klasse wird in der Slick2d Doc nicht gelistet. Ist auch nicht wichtig ob float oder double in einem Spiel, kommt aufs gleiche heraus. (Wenn sich darüber überhaupt jmd mal den Kopf zerbrechen musste.).

    Meistens verwendet man float, weil es vollkommen ausreicht und weil der ganze andere Code auch float verwendet und damit die Präzision sowieso wieder flöten geht.
    Geändert von TMII (04.08.2016 um 03:54 Uhr)

  7. #7
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    Off topic:

    Oh mann, bin ich blind - dass Slick verwendet wird steht im TITEL! Dann ist der Hinweis von TMII genau der richtige

  8. #8
    Global Moderator Viertel Gigabyte Avatar von SlaterB
    Registriert seit
    06.08.2008
    Fachbeiträge
    2.716
    Genannt
    291 Post(s)
    Off topic:
    aber erst seit gestern 23:52, gewiss hattest du ein Tab (bis 1:35) schon länger offen
    hinsichtlich Text freilich noch blinder
    Hansa wird Meister

  9. #9
    User int Themenstarter

    Registriert seit
    27.03.2016
    Fachbeiträge
    38
    Genannt
    3 Post(s)
    Leider funktioniert mit Vektor2f diese Methode nicht: "setLength".
    Und addForce funktioniert auch nicht.

    vektor.setLength(beschleunigung);
    addForce(vektor);

    Wie könnte ich das lösen?

    MfG

  10. #10
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    setLength könnte man durch

    vector.normalise();
    vector.scale(beschleunigung);

    emulieren. Und addForce einfach durch "add".

  11. #11
    User int Themenstarter

    Registriert seit
    27.03.2016
    Fachbeiträge
    38
    Genannt
    3 Post(s)
    "normalise" funktioniert nicht, aber scale wird schon mal nicht rot unterstrichen.
    "addForce" durch "add" ersetzen funktioniert nicht, add wird rot unterstrichen.
    Ihr habt ja gesagt, das double bei der Spiele programmierung nicht notwendig sei, float reiche völlig aus.
    Wenn ich einen Vector mit float erzeuge, dann müssen alle variablen ebenfalls float sein.
    Meine universelle Gravitationskonstante funktioniert mit dem Datentyp float leider nicht wird also rot unterstrichen,
    da der Zahlenwert für float einfach zu lange ist:
    "float gravity = 0.0000000000667250;"
    Wert habe ich aus dem Internet.

    Wie kann ich das problem mit "add" und dem zu langen gravity Wert lösen?

    Danke für die Hilfe!!
    MfG

  12. #12
    User Kilobyte
    Registriert seit
    13.10.2015
    Fachbeiträge
    175
    Genannt
    19 Post(s)
    Ist das Konzept von Packages und Imports in Java bekannt?

    Welcher Vektor oder Vector wird denn jetzt überhaupt verwendet? Einfach mal mit ganzem Namen, samt package nennen.

    rot unterstrichen ist eine Sache, die Fehlermeldung die es dazu gibt eine andere. In Eclipse einfach mal am Rand mit der Maus über das rote Kreuz fahren um mehr zu erfahren.

  13. #13
    User Viertel Megabyte Avatar von TMII
    Registriert seit
    19.02.2015
    Fachbeiträge
    319
    Genannt
    34 Post(s)
    Naja den Vector hat er, aber es fehlt die Info welche Physics Engine verwendet wird, oder hat Slick2D eine integrierte?
    Das Buch ist über Greenfoot - nach Google ein DragNDrop Java-Lernprogramm - aber was hat das mit Slick2d zu tun? Und was hat Slick2d mit einer Physics Engine zu tun?
    Der Code aus dem Buch der sich auf Greenfoot bezieht, funktioniert nur mit der Greenfoot Library.

    In was für einer IDE programmierst du denn und welche Bibliotheken verwendest du neben Slick2D noch?

    Zitat Zitat von Javaman1991 Beitrag anzeigen
    "float gravity = 0.0000000000667250;"
    Auf welchem Planeten und in welcher Einheit soll das sein? Physics Engines verwenden meist SI-Einheiten, auf der Erde entspricht das
    float = 9.81; // in N/kg bzw. m/s^2
    Es sei denn es handelt sich um irgendeinen Pixelwert Zeugs...

    Dafür brauchen wir mehr Informationen.

  14. #14
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    https://de.wikipedia.org/wiki/Gravitationskonstante , ja, ist falsch, vermutlich sollte die Gravitation ein Vektor (0,-9.81) sein.

  15. #15
    User int Themenstarter

    Registriert seit
    27.03.2016
    Fachbeiträge
    38
    Genannt
    3 Post(s)
    Ich programmiere in Eclipse. Wie ihr schon erfahren habt verwende ich Slick2D, da es viele Klassen und Methoden zur Spieleprogrammierung zur vefügung stellt die ich benötigt habe. Nun geht es einfach darum, das ich diesen Code in Java realisieren möchte. Ich benötige für meine Spiel eine realistische Gravitation. Mit diesem Code sollte es funktionieren. Zurzeit verwende ich nur Slick2D-Bibliotheken.
    Hier der Fehlercode von: "add(vector);" => The method add(Vector2f) is undefined for the type (Hier der name meiner Klasse).
    Wie kann ich die Gravitationskonstante: 6,67408e-11 in einer Variable abspeichern?

  16. #16
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    1. Die Methode "addForce", die in dem verlinkten Buchkapitel verwendet wird, muss man selbst implementieren. Dort bezieht sie sich offenbar auf diese "SmoothMover"-Klasse, von der weiter oben schon die Rede war.

    2. Die Gravitationskonstante:
    private static final float GRAVITY = 6.67408e-11f;


    Vir ein paar Jahren hatte ich da mal was gebastelt. Hat nur indirekt mit der Frage zu tun, ist aber hübsch anzuschauen.
    Java Code:
    1.  
    2. package bytewelt;
    3. import java.awt.Color;
    4. import java.awt.Graphics;
    5. import java.awt.Graphics2D;
    6. import java.awt.geom.Point2D;
    7. import java.util.ArrayList;
    8. import java.util.Collections;
    9. import java.util.List;
    10. import java.util.Random;
    11. import java.util.concurrent.CopyOnWriteArrayList;
    12.  
    13. import javax.swing.JFrame;
    14. import javax.swing.JPanel;
    15. import javax.swing.SwingUtilities;
    16.  
    17. public class ThouHeartlessBitch
    18. {
    19.     public static void main(String[] args)
    20.     {
    21.         SwingUtilities.invokeLater(new Runnable()
    22.         {
    23.             @Override
    24.             public void run()
    25.             {
    26.                 createAndShowGUI();
    27.             }
    28.         });
    29.     }
    30.    
    31.     private static void createAndShowGUI()
    32.     {
    33.         JFrame f = new JFrame();
    34.         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    35.         f.setSize(600,600);
    36.        
    37.         final ParticleSystem particleSystem = new ParticleSystem();
    38.         final ParticleSystemPanel particleSystemPanel = new ParticleSystemPanel(particleSystem);
    39.        
    40.         Thread thread = new Thread(new Runnable()
    41.         {
    42.             @Override
    43.             public void run()
    44.             {
    45.                 long previousNS = System.nanoTime();
    46.                
    47.                 while (true)
    48.                 {
    49.                     long currentNS = System.nanoTime();
    50.                     double seconds = (currentNS - previousNS) / 1e9;
    51.                     previousNS = currentNS;
    52.                     particleSystem.doStep(seconds);
    53.                     particleSystemPanel.repaint();
    54.                     try
    55.                     {
    56.                         Thread.sleep(10);
    57.                     }
    58.                     catch (InterruptedException e)
    59.                     {
    60.                         Thread.currentThread().interrupt();
    61.                         return;
    62.                     }
    63.                 }
    64.             }
    65.         });
    66.         thread.setDaemon(true);
    67.         thread.start();
    68.        
    69.        
    70.         f.getContentPane().add(particleSystemPanel);
    71.         f.setVisible(true);
    72.     }
    73. }
    74.  
    75. class ParticleSystemPanel extends JPanel
    76. {
    77.     private final ParticleSystem particleSystem;
    78.    
    79.     public ParticleSystemPanel(ParticleSystem particleSystem)
    80.     {
    81.         this.particleSystem = particleSystem;
    82.     }
    83.    
    84.     @Override
    85.     protected void paintComponent(Graphics gr)
    86.     {
    87.         super.paintComponent(gr);
    88.         Graphics2D g = (Graphics2D)gr;
    89.         g.setColor(Color.RED);
    90.         for (Particle particle : particleSystem.getParticles())
    91.         {
    92.             Point2D position = particle.getPosition();
    93.             int x = (int)(position.getX()*getWidth());
    94.             int y = getHeight() - (int)(position.getY()*getHeight());
    95.             g.fillOval(x-5, y-5, 10, 10);
    96.         }
    97.     }
    98. }
    99.  
    100.  
    101. interface Force
    102. {
    103.     Point2D computeAcceleration(Particle particle);
    104. }
    105.  
    106. class Gravity implements Force
    107. {
    108.     @Override
    109.     public Point2D computeAcceleration(Particle particle)
    110.     {
    111.         return new Point2D.Double(0, -9.81*0.1);
    112.     }
    113. }
    114.  
    115. class ParticleSystem
    116. {
    117.     private static final Random random = new Random(0);
    118.     private final List<Particle> particles;
    119.     private final List<Force> forces;
    120.     private double totalTime = 0;
    121.    
    122.     public ParticleSystem()
    123.     {
    124.         particles = new CopyOnWriteArrayList<Particle>();
    125.         forces = new ArrayList<Force>();
    126.        
    127.         forces.add(new Gravity());
    128.     }
    129.    
    130.     public List<Particle> getParticles()
    131.     {
    132.         return Collections.unmodifiableList(particles);
    133.     }
    134.    
    135.     public void doStep(double t)
    136.     {
    137.         removeOld();
    138.         emitNew();
    139.         updateAccelerations();
    140.         updateVelocities(t);
    141.         updatePositions(t);
    142.         totalTime += t;
    143.         //System.out.println("After "+totalTime+": "+particles);
    144.     }
    145.  
    146.     private void removeOld()
    147.     {
    148.         List<Particle> toRemove = new ArrayList<Particle>();
    149.         for (Particle particle : particles)
    150.         {
    151.             Point2D position = particle.getPosition();
    152.             if (position.getY() < 0)
    153.             {
    154.                 toRemove.add(particle);
    155.             }
    156.         }
    157.         particles.removeAll(toRemove);
    158.     }
    159.  
    160.     private void emitNew()
    161.     {
    162.         List<Particle> toAdd = new ArrayList<Particle>();
    163.         for (int i=0; i<2; i++)
    164.         {
    165.             Particle particle = new Particle();
    166.             particle.setPosition(new Point2D.Double(0.5,0));
    167.             double vx = -0.5+random.nextDouble();
    168.             double vy = 1.5*random.nextDouble();
    169.             particle.setVelocity(new Point2D.Double(vx,vy));
    170.             toAdd.add(particle);
    171.         }
    172.         particles.addAll(toAdd);
    173.     }
    174.  
    175.     private void updateAccelerations()
    176.     {
    177.         for (Particle particle : particles)
    178.         {
    179.             Point2D totalAcceleration = new Point2D.Double();
    180.             for (Force force : forces)
    181.             {
    182.                 Point2D acceleration = force.computeAcceleration(particle);
    183.                 addAssign(totalAcceleration, acceleration);
    184.             }
    185.             particle.setAcceleration(totalAcceleration);
    186.             //System.out.println("acc "+particle.getAcceleration());
    187.         }
    188.     }
    189.    
    190.     private void updateVelocities(double t)
    191.     {
    192.         for (Particle particle : particles)
    193.         {
    194.             Point2D velocity = particle.getVelocity();
    195.             Point2D acceleration = particle.getAcceleration();
    196.             scaleAddAssign(velocity, t, acceleration);
    197.             particle.setVelocity(velocity);
    198.             //System.out.println("vel "+particle.getVelocity());
    199.         }
    200.     }
    201.    
    202.     private void updatePositions(double t)
    203.     {
    204.         for (Particle particle : particles)
    205.         {
    206.             Point2D position = particle.getPosition();
    207.             Point2D velocity = particle.getVelocity();
    208.             scaleAddAssign(position, t, velocity);
    209.             particle.setPosition(position);
    210.             //System.out.println("pos "+particle.getPosition());
    211.         }
    212.     }
    213.    
    214.     private static void addAssign(Point2D result, Point2D addend)
    215.     {
    216.         double x = result.getX() + addend.getX();
    217.         double y = result.getY() + addend.getY();
    218.         result.setLocation(x, y);
    219.     }
    220.    
    221.     private static void scaleAddAssign(Point2D result, double factor, Point2D addend)
    222.     {
    223.         double x = result.getX() + factor * addend.getX();
    224.         double y = result.getY() + factor * addend.getY();
    225.         result.setLocation(x, y);
    226.     }
    227.    
    228. }
    229.  
    230.  
    231. class Particle
    232. {
    233.     private final Point2D position;
    234.     private final Point2D velocity;
    235.     private final Point2D acceleration;
    236.     private final double mass;
    237.    
    238.     public Particle()
    239.     {
    240.         position = new Point2D.Double();
    241.         velocity = new Point2D.Double();
    242.         acceleration = new Point2D.Double();
    243.         mass = 1;
    244.     }
    245.  
    246.     public Point2D getPosition()
    247.     {
    248.         return new Point2D.Double(position.getX(), position.getY());
    249.     }
    250.     public void setPosition(Point2D point)
    251.     {
    252.         position.setLocation(point);
    253.     }
    254.    
    255.     public Point2D getVelocity()
    256.     {
    257.         return new Point2D.Double(velocity.getX(), velocity.getY());
    258.     }
    259.     public void setVelocity(Point2D point)
    260.     {
    261.         velocity.setLocation(point);
    262.     }
    263.  
    264.     public Point2D getAcceleration()
    265.     {
    266.         return new Point2D.Double(acceleration.getX(), acceleration.getY());
    267.     }
    268.     public void setAcceleration(Point2D point)
    269.     {
    270.         acceleration.setLocation(point);
    271.     }
    272.    
    273.     public double getMass()
    274.     {
    275.         return mass;
    276.     }
    277.    
    278.     @Override
    279.     public String toString()
    280.     {
    281.         return String.format("Particle[p=(%.2f,%.2f),v=(%.2f,%.2f),a=(%.2f,%.2f)]",
    282.             position.getX(), position.getY(),
    283.             velocity.getY(), velocity.getY(),
    284.             acceleration.getX(), acceleration.getY());
    285.     }
    286.    
    287. }

  17. #17
    User Halbes Megabyte Avatar von Crian
    Registriert seit
    02.08.2013
    Fachbeiträge
    552
    Genannt
    32 Post(s)
    Sieht hübsch aus!

  18. #18
    Frequent User Megabyte
    Registriert seit
    01.08.2013
    Fachbeiträge
    1.741
    Genannt
    114 Post(s)
    Off topic:
    @Marco13 war das die Simulation deines Asteroids-Bots?

  19. #19
    Global Moderator Viertel Gigabyte
    Registriert seit
    05.08.2008
    Fachbeiträge
    4.965
    Genannt
    325 Post(s)
    Off topic:

    Hm???!??? Das hat damit nichts zu tun, da gibt's keine Gravitation und nichts physikalisches. Das war nur eine Antwort auf eine Frage nach ~"Formeln für einfache Schwerkraft" in einem anderen Forum.


    Der entscheidende Unterschied ist, dass es in DIESEM Thread schon um Gravitation im allgemeinen Sinn (abhängig von der Masse) geht. In dem Besipiel ist die Masse quasi als "Masse der Erde" vorgegeben (und die der Partikel ist vernachlässigbar). Deswegen kann man in dem Beispiel die Gravitationsbeschleunigung direkt als 9.81 m/s*s hartverdrahten, während genau diese Beschleunigung (d.h. eigentlich die Kraft) in diesem Thread ja (auf Basis der Gravitationskonstanten und der Massen) erst berechnet werden soll.

  20. #20
    Frequent User Megabyte
    Registriert seit
    01.08.2013
    Fachbeiträge
    1.741
    Genannt
    114 Post(s)
    Off topic:
    Zitat Zitat von Marco13 Beitrag anzeigen
    Hm???!??? Das hat damit nichts zu tun, da gibt's keine Gravitation und nichts physikalisches.
    Ist schon klar, daher auch der Clown. Es hat mich nach ein paar Sekunden zuschauen nur an meinen eingereichten Bot erinnert, der auch "wie wild" im Kreis herum geschossen hat. Ich hab gerade nochmal kurz nachgeschaut, die Website mit den Ergebnissen auf der man sich das nochmal hätte ansehen können, ist mittlerweile leider offline.

+ Antworten Thema als "gelöst" markieren
Seite 1 von 3 1 2 3 LetzteLetzte

Direkt antworten Direkt antworten

Wie nennt man Wasser im gasförmigen Aggregatzustand?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Ähnliche Themen

  1. (JMatIO) Problem mit .mat Files erzeugen
    Von BlackHawk im Forum Allgemeine Themen
    Antworten: 1
    Letzter Beitrag: 06.02.2016, 16:18
  2. Antworten: 0
    Letzter Beitrag: 12.06.2014, 13:57
  3. Antworten: 7
    Letzter Beitrag: 01.05.2014, 17:56
  4. BufferUnderFlowException beim laden eines Fonts
    Von FrostByte im Forum Spiele- und Multimedia-Programmierung
    Antworten: 4
    Letzter Beitrag: 29.09.2013, 23:25

Berechtigungen

  • Neue Themen erstellen: Ja
  • Themen beantworten: Ja
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •