![]() |
ArtellerieSpiel-Kollision mit Landschaft
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 (; |
AW: ArtellerieSpiel-Kollision mit Landschaft
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; |
AW: ArtellerieSpiel-Kollision mit Landschaft
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 |
AW: ArtellerieSpiel-Kollision mit Landschaft
Leg dir ein Array an:
Delphi-Quellcode:
Fülle das Array an der X-Üosition Deines Landschaftsbildes mit der maximalen Höhe an dieser Stelle.
Var
Hoehen : Array[0..MaxImagewidth] of Integer; (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 |
AW: ArtellerieSpiel-Kollision mit Landschaft
IMHO sollte man sich entsprechende
![]() |
AW: ArtellerieSpiel-Kollision mit Landschaft
Für ein 2D Spiel kann ich dir die hervorragende und freie Physik-Engine
![]() (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: ![]() Für Box2D gibt es einen Delphi Port: ![]() Um deine Bilder in Collision-Shapes umzuwandeln, gibt es auch ein hervorragendes Programm, den ![]() 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: ![]() |
AW: ArtellerieSpiel-Kollision mit Landschaft
Ich danke euch allen für eure Ideen! Ich werd mich jetz ma dran setzen und versuchen was am besten funktioniert (:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz