Autor Beitrag
ace1905
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Do 24.01.08 21:10 
hi!
ich hab mir heute mal ein kleines raumschiff mit canvas gezeichnet und das kann sich jetz auch shcon auf ner 2d fläche bewegen. jetzt würd ich gern durch die blauen abschussrohre noch munition abfeuern.
in form von kleinen ellipsen oder ähnlichem.
mein problem ist jetzt, dass ich zwar eine kugel herrauskommen lassen kann aber wie kann ich die dann bewegen.
ich hab schon mal an ein zweites image gedacht auf dem die kugeln sich bewegen, weil bei jeder bewegung meines raumschiffes image1 neu gezeichnet wird.
ich komm jetzt wie gesagt nicht weiter mit der bewegung der teilchen.
ich leg mal den quelltext dazu.
thx schonma für die antworten.
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von ace1905 am So 27.01.08 18:37, insgesamt 4-mal bearbeitet
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Do 24.01.08 21:17 
Speicher jedes Geschoss in einem array oder einer Tlist, dieses gehst du dann immer mit einem timer durch und veränderst die Position des Geschosses. der timer ruft zum schluss eine prozedur auf die alle Objekte an ihrer position zeichnet.

€: cooles raumschiff btw, als ich sowas gemacht habe, sah das ziemlich schlecht aus...
ace1905 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Do 24.01.08 21:21 
jop danke, ich hab au nach ner bildvorlage im inet gesucht un habs dann probiert umzusetzen.
also nochmal zu der listbox oder dem array. du meist damit ich soll die koordianten in nem array abspeichern un dann immer mitm timer zum beispiel y+5 rechnen un dann wieder neu zeichnen?
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Do 24.01.08 21:27 
Genau, nur keine listbox sondern eine Tlist in die du Objekte ablegen kannst. Hast du nur einen geschosstyp und brauchst nur die Position des Geschosses eignet sich wohl am besten ein array of Tpoint.

In dem Timer solltest du dann auch die Bewegung deines Raumschiffs und die Positionierung der Sterne verlagern.
ace1905 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Do 24.01.08 21:33 
ok ich bin jetz dran un hoff mal, dass ichs hinbekomm^^
wenn ich ein array of TPoint mache dann sind es doch einzele pixel die ich da rein schreibe oder?
wie würde sowas dann zum beispiel aussehen?


Edit: TPoint ist für Pixel aber ich machs ja mit Ellipsen.

Habs geschafft...naja so ziemlich^^ ich weiß nicht wie ich es nun hinbekomme, dass die munition immer nur einmal gezeichnet wird.
die neuere version ist oben auf der seite zum download.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Do 24.01.08 22:30 
Titel: Timebased Movements
Also das Stichwort ist "timebased Movements"...
Hab' ich mal in 'nem andern Thread gelesen, wie das genau geht
Googelst du mal besser.
Ich bin mir nicht ganz sicher, ob ich dich richtig verstanden habe.

user profile iconace1905 hat folgendes geschrieben:
ich weiß nicht wie ich es nun hinbekomme, dass die munition immer nur einmal gezeichnet wird.


:oops: 'Tschuldigung wenn ich das falsch verstanden habe und jetzt mit Banalitäten komme aber du löschst, also überzeichnest, das Geschoss einfach.
Eventuell ist es auch laufzeitrelevant, bei vielen Geschossen einfach komplett neu zu zeichnen.

user profile iconace1905 hat folgendes geschrieben:
Edit: TPoint ist für Pixel aber ich machs ja mit Ellipsen.


Joah, aber die Position, von der aus du die Ellipsen zeichnest kannst du in einem TPoint-Array speichern, da die Positionen ja nciht genauer als bis auf einen Pixel gezeichnet werden können.

Edit: Runterladen will ichs(zumindest jetzt^^) nicht, aber es wäre nett, wenn einer der engagierteren Tester einen oder zwei screens posten könnte :D Thx im Voraus
ace1905 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Do 24.01.08 22:33 
übermalen mach ich dann mit pmNotXOr oder?
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Do 24.01.08 22:36 
Okay, das Problem ist folgendes: Dein Timer zeichnet derzeit nur die Geschosse an der neuen Position. D.H. die vorher an der alten Position gezeichneten Geschosse sind noch im Bild und werden nicht überzeichnet. Am besten machst du es wie folgt:

Du schreibst alle Zeichnungen (das Raumschiff, die Sterne, Geschosse) in eine eigene Prozedur zeichnen. Ganz am anfang der Prozedur kommt der Befehl mit dem du das gesamte Bild löscht (bei dir derzeit in weltraum). Dein Timer tut nun folgendes: Er berechnet die neue Position für die Geschosse und ruft dann die Prozedur zeichnen (oder wie du sie genannt hast) auf. Diese löscht dann erstmal das Bild und zeichnet alle Objekte an ihrer neuen Position.


@hidden: Für einen Anfänger ist es wesentlich einfacher mit einem Timer zu arbeiten, als mit TBM.
ace1905 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Do 24.01.08 22:46 
thx es funktioniert jetzt :)
ich lad gleich nochma die neue datei hoch.
für heute reichts erstma...wenn ich dann noch weitere fragen hab dann wende ich mich wieder an euch.
habt mir sehr geholfen ;)
DrRzf
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 260

Win XP Prof
D7 Enterprise
BeitragVerfasst: Do 24.01.08 23:15 
2 kleine anmerkungen.
a und d für links rechts ist ok, aber dann liegt e zum schiessen etwas ungünstig.
wenn du a oder d festhältst, bewegt sich das schiff seitlich, schiesst man bleibts dann stehn.

_________________
rein statistisch gesehen darf man keiner statistik trauen die man nicht selbst gefälscht hat.
ace1905 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: Fr 25.01.08 14:07 
ja stimmt aber ich weiß nicht wie ich es zum beispiel auf die maus legen kann, also das schießen.
wenn ich key = VK_LBUTTON nehme passiert nichts. wie kann ich das in den griff bekommen?
wie zwei tasten gleichzeitig gedrückt werden können weiß ich im moment genauso wenig^^ :oops:
ich habs ma ausprobiert indem ich noch eine extra if anweisung eingebaut hab aber das hat nicht funktioniert.
Jann1k
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 866
Erhaltene Danke: 43

Win 7
TurboDelphi, Visual Studio 2010
BeitragVerfasst: Fr 25.01.08 15:48 
Du musst andere Events nehmen: Für die Mauistaste zum schießen das onclick event oder onmousedowb event.

Für das Drücken mehrerer Tasten: Nimm vier boolsche Variablen (unten, oben, rechts, links) . Wenn im onkeydown event eine der tasten wasd gedrückt wird, setzt du nur die entsprechende variable auf true. Wird im onkeyup event eine taste losgelassen, setzt du die entsprechende variable auf false.
Die Bewegung des Raumschiffs verlagerst du in den Timer (überprüfen on links = true ist dann anch links bewegen und das für alle vier richtungen).
ace1905 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: So 27.01.08 10:17 
so ich hab jetzt soweit alles hinbekommen und hab mich hier im forum nun mal über kollisionen informiert( zumindest hab ichs versucht). da ist im moment sogar eine aktuelle diskussion am laufen aber da gehts nur darum wie man die kollision von einem dreieck und einem kreis bestimmt.
kreis ist ja schonmal nicht schlecht(also für meine geschosse) aber ich müsste ja auch die kollison an komplexeren formen erkennen, da ein feindliches raumschiff ähnliche formen haben soll.
hat da jemand ne idee wie man das realisieren könnte.
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: So 27.01.08 14:20 

_________________
MFG
Michael Springwald, "kann kein englisch...."
ace1905 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 73



BeitragVerfasst: So 27.01.08 15:40 
ich hab heute morgen schon ein bisschen weiter programmiert un hab das dann letztendlich mit der farberkennung von pixel gemacht. ich hab jetzt ein gegnerisches raumschiff eingebaut und das kann auch abgeschossen werden.
ich erneuer wieder die downloaddatei damit ihrs euch eventuell angucken könnt^^
is aber noch net perfekt. das gegnerische schiff flackert noch, kann sich noch nicht bewegen und noch nicht schießen.