AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ArtellerieSpiel-Kollision mit Landschaft

Ein Thema von Toni77 · begonnen am 16. Jan 2012 · letzter Beitrag vom 23. Jan 2012
Antwort Antwort
Toni77

Registriert seit: 7. Dez 2011
3 Beiträge
 
#1

ArtellerieSpiel-Kollision mit Landschaft

  Alt 16. Jan 2012, 12:46
Hallo zusammen,
ich bin gerade dabei ein Artelleriespiel zu programmieren.
(d.h. eine Kugel auf einer Wurfparabelfunktion entlang laufen zu lassen um ein Ziel zu Treffen - durch Eingabe von Abschusswinkel und Geschwindigkeit zu regulieren)

meine Kugel fliegt auch schon ordnungsgemäß auf einer Bahn und auch bei der Kollision mit dem Ziel gibt es keine Probleme.
Jedoch weiß ich nicht wie es schaffe, dass das Programm, wenn die Kugel mit der Langschaft( sprich Felsen,Bäume,etz.) kollidiert, abbricht. Die Landschaft ist ein Image dass ich bei selbst gezeichnet und ausgeschnitten habe, sodass es sich hierbei um ein krummliniges Image handelt.
Falls jemand eine Idee hat wie ich das hinbekommen könnte wäre mir sehr geholfen!

Danke (;
  Mit Zitat antworten Zitat
Benutzerbild von Cylence
Cylence

Registriert seit: 2. Sep 2004
Ort: Allgäu
246 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: ArtellerieSpiel-Kollision mit Landschaft

  Alt 16. Jan 2012, 13:12
Hi,

ich hab naja etwas ähnliches mal gemacht, mit Kolissionen usw, ich habe ein Panel in dem alles ist, einmal das XHandle, ist das Panel was bei dir sozusagen die kugel ist, und dann check ich alle componenten in dem Panel, ob diese mit der "Kugel" kollidieren, evtl bringt dir das was:

Delphi-Quellcode:
   
var
collision : Boolean;
XCol : Integer;
begin
 for i := 0 to Panel1.ControlCount -1 do begin
        IF RectInRegion(CreateRectRgn(XHandle.Left, XHandle.Top, XHandle.Width+Xhandle.Left, XHandle.Height + XHandle.Top), Panel1.Controls[i].BoundsRect) and (Panel1.Controls[i].Name <> XHandle.Name) then begin
           XCol := Panel1.Controls[i]; //componentnumber von panel das kollidiert
           Collision := True;
           Break;
        end;
    end;
    //Collision detected
    if Collision then begin


    end;
end;
Tom
Just DO it
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
40.509 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: ArtellerieSpiel-Kollision mit Landschaft

  Alt 16. Jan 2012, 13:46
Dafür muß er aber erstmal seinen Hintergrund (die Landschaft) in mehrere solche Komponenten/Kollisionsgegner aufteilen, um darauf testen zu können.

- entweder manuell voher diese nicht sichtbaren "Panels" erstellen und über dem Hintergrund positionieren
- das Bild untersuchen, also die Grenzen via Code suchen und solche "Panels" erstellen
- oder das Bild wärend des Wurfs untersuchen (die Pixel auswerten) und entsprechend eine Kollision erkennen
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.076 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: ArtellerieSpiel-Kollision mit Landschaft

  Alt 17. Jan 2012, 11:01
Leg dir ein Array an:


Delphi-Quellcode:
Var
  Hoehen : Array[0..MaxImagewidth] of Integer;
Fülle das Array an der X-Üosition Deines Landschaftsbildes mit der maximalen Höhe an dieser Stelle.
(Von unten suchen bis Du "Himmel" findest...

Dann brauchst Du nur für den Schuss an X,Y im Array nach zu sehen, ob für X der Y Wert kleiner ist...

Fertig! (und viel viel schneller als zu laufzeit das Bild zu untersuchen)

Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: ArtellerieSpiel-Kollision mit Landschaft

  Alt 17. Jan 2012, 11:21
IMHO sollte man sich entsprechende Regions für die einzelnen Teile anlegen (Landschaft, Geschoß) und dann prüfen, ob sich diese Regions überlappen
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#6

AW: ArtellerieSpiel-Kollision mit Landschaft

  Alt 17. Jan 2012, 13:25
Für ein 2D Spiel kann ich dir die hervorragende und freie Physik-Engine Box2D von Erin Catto empfehlen, die relativ bekannt ist.
(z.B. ist sie der Unterbau von "Angry Birds", für ein 2D-Artillerie-Spiel bietet sie sich somit geradezu an.).
Zudem ist sie ziemlich leicht zu erlernen, einfach das Handbuch lesen: http://box2d.org/manual.pdf

Für Box2D gibt es einen Delphi Port: http://code.google.com/p/box2d-delphi/

Um deine Bilder in Collision-Shapes umzuwandeln, gibt es auch ein hervorragendes Programm, den Physics Editor von code'n'web.
Dieser scannt deine Bilder-Outlines und erstellt daraus konvexe Collision Shapes, die du in ein lesbares Format exportieren und dann in Box2D verwenden kannst.
Der Scanner davon ist wirklich gut, ziemlich akkurat und erzeugt Shapes ohne viel Overhead.

Ich verwende beides (Box2D + PhysicsEditor) derzeit für meine in der Entwicklung befindliche HTML5 Game Engine (dafür natürlich die JavaScript-Version von Box2D) und bin hellauf begeistert, was man damit alles machen kann.

(Demo der HTML5-Engine / Box2D: http://cahira.moongine.com/demos/cahira-physics-test/)

Geändert von blackfin (17. Jan 2012 um 13:43 Uhr)
  Mit Zitat antworten Zitat
Toni77

Registriert seit: 7. Dez 2011
3 Beiträge
 
#7

AW: ArtellerieSpiel-Kollision mit Landschaft

  Alt 23. Jan 2012, 00:08
Ich danke euch allen für eure Ideen! Ich werd mich jetz ma dran setzen und versuchen was am besten funktioniert (:
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf