![]() |
Zufalls-Bewegung
Hallo nochmal,
ich habe noch eine Frage :roll: Also, in meinem Delphi-Game, bewegen sich Vögel-Bilder durch den Bildschirm. Diese Bewegung habe ich mit einem Timer gemacht:
Delphi-Quellcode:
Der Timer wird aktiviert (enabled) wenn ich einen Button drücke.
image2.Top:=image2.Top+10;
image2.Left:=image2.left+10; Ich möchte aber, dass die Bilder zufällig die richtung wechseln, während sie durch den Bildschirm fliegen, ist das möglich, wenn ja wie würde dass dann lauten? |
Re: Zufalls-Bewegung
Hallo,
klar ist das möglich. Definiere einfach zwei Variablen als Integer (z. B. RichtungX und RichtungY). Die setzt Du am Anfang auf +1 und rufst Randomize auf. In Deinem Timer schreibst Du dann einfach
Delphi-Quellcode:
Durch die Multiplikation mit -1 drehst Du einfach das Vorzeichen um. Den Wert bei Random kannst Du beliebig wählen, je größer, desto seltener die Wechsel.
if Random(100) = 0 then
RichtungX := -RichtungX; if Random(100) = 0 then RichtungY := -RichtungY; image2.Top:=image2.Top+10 * RichtungY; image2.Left:=image2.left+10 * RichtungX; Gruß xaromz |
Re: Zufalls-Bewegung
Etwa so:
Delphi-Quellcode:
Randomrange gibt ein zufällige Zahl zwischen den beiden übergebenen zurück.
Randomize;
// OnTimer: delta := randomrange(-10,10); // in unit Math; Vogel.left := Vogel.Left+Delta; Natürlich noch Überprüfungen, ob der Vogel aus dem Bild fliegt usw. |
Re: Zufalls-Bewegung
Also, ich muss nun
Delphi-Quellcode:
in den Timer angeben, und dann? Weiter habe ich nicht mehr verstanden!
if Random(100) = 0 then
RichtungX := -RichtungX; if Random(100) = 0 then RichtungY := -RichtungY; image2.Top:=image2.Top+10 * RichtungY; image2.Left:=image2.left+10 * RichtungX; |
Re: Zufalls-Bewegung
Sein Code funktioniert so, dass der Vogel sich bei jedem Timerevent um 10 Pixel bewegt.
Mit dem Random(100)=0 will er erreichen, dass sich die Bewegungsrichtung des Vogels ändert. Da es sich bei RichtungX aber wahrscheinlich um eine lokale Variable handelt, wird der Code so nicht laufen. Anderer Vorschlag:
Delphi-Quellcode:
Damit verschiebt sich dein Vogel jedesmal um 0-19 Pixel und änder etwa alle hundert Events die Rchtung.
if random(100)=0 then x:=1 else x:=-1;
Vogel.left:= Vogel.left+x*random(20); |
Re: Zufalls-Bewegung
Dass habe ich jetzt unter
Delphi-Quellcode:
eingefügt, nun wird mir aber gesagt, dass "x" kein deklarierter befehl oder so ist!
image2.Top:=image3.Top+27;
image2.Left:=image3.left+17; |
Re: Zufalls-Bewegung
Hallo,
durch die Random-Befehle wird (so der Zufall will) bei dem Variablen das Vorzeichen gewechselt (RichtungX := -RichtungX). Durch die anschließende Multiplikation mit eben dieser Variable (sprich: dem Vorzeichen) wird entweder 10 addiert oder eben (10 * -1 = -10) subtrahiert. In Dein Form.Create schreibst Du noch
Delphi-Quellcode:
Damit initialisierst Du den Zufallszahlengenerator und Deine beiden Vorzeichen.
Randomize;
RichtungX := 1; RichtungY := 1; Zitat:
Gruß xaromz |
Re: Zufalls-Bewegung
Sorry, dass ihr mir alles so genau erklähren müsst, aber wo genau muss das jetzt rein:
Zitat:
|
Re: Zufalls-Bewegung
Hallo,
das Zeug muss in Deine Create-Methode (Ereigniss FormCreate im OI). Dann wird das Ganze beim Fenster-Erzeugen am Anfang aufgerufen. Außerdem musst Du die beiden Variablen RichtungX und RichtungY noch im private-Bereich Deiner Form deklarieren. Gruß xaromz |
Re: Zufalls-Bewegung
pass auf...
du sagst in jedem ontimer nicht
Delphi-Quellcode:
sondern
image2.Top:=image2.Top+10;
image2.Left:=image2.left+10;
Delphi-Quellcode:
Random(2) gibt 0, 1 oder 2 zurück...Random(2)-1 also -1,0 oder 1
image2.Top:=image2.Top+(Random(3)-1)*10;
image2.Left:=image2.left+(Random(3)-1)*10; also bewegt sich das Image nicht mehr nur nach unten, sondern nach unten, nach oben oder gar nicht für rechts/links ist es analog. im OnCreate der Form rufst du dann noch Randomize; auf um den Zufallgenerator zu initialisieren. Fertig! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:31 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