Entwickler-Ecke
Multimedia / Grafik - bewegte Grafik für Schulreferat, Hilfe für Neuanfänger
gestiefelter Köter - Mo 21.04.03 15:55
Titel: bewegte Grafik für Schulreferat, Hilfe für Neuanfänger
Ich habe als totaler Neuanfänger in sachen Grafik in Delphi die Aufgabe in der Schule ein kleines Referat zu diesem Thema zu halten. Da unser Lehrbuch aber nur so einfache Befehle behandelt, wie Ellypsen, Rechtecke, Linien, pixel, etc. behandelt und sonst nur ein viel zu großes Programm erklärt, hat mein Informatiklehrer gemeint, dass es interessant wäre, etwas Bewegung in die grafik zu bekommen, nur im buch ist weit und breit nichts darüber zu finden.
Kann jemand helfen??? :?:
Ich habe mir vorgestellt, zum Beispiel so etwas zu machen wie einen Kreis der schräg auf eine Linie aufprallt und wieder in die andere Richtung wegfliegt zu machen, nur ohne vorkenntnisse geht das nicht.
Danke im voraus, der gestiefelte Köter
FloSch - Mo 21.04.03 16:10
Hallo,
wenn dein Informatiklehrer meint, es wäre Interessant "Grafiken" bewegen zu lassen, dann soll er dir das auch erklären. Er kann dir keine Techniken abverlangen, welche ihr nicht behandelt habt.
Nun zu deinem Problem:
Experementiere zuerst mit den Canvas Eigenschaften und Prozeduren herum und mache dich mit Canvas vertraut. Ich gehe mal davon aus, dass ihr in eurem Unterricht bereits Schleifen behandelt habt, wenn ihr jetzt schon beim TCanvas Objekt seit. Mit Hilfe von Schleifen und den Canvas Prozeduren sollte es kein Problem sein, solch eine Aufgabe zu erledigen. Bei Fragen wende dich bestenfalls an deinen Lehrer.
Grüße
Florian :roll:
t/f - Mo 21.04.03 19:58
hi du!
also das Prinzip von der Bewegung einer Grafik ist denkbar einfach.
Du solltest wissen, dass eine Grafik ein Objekt ist. Delphi ist nuneinmal eine objektorientierte Programmiersprache ;) ...
So nun haben die Objekte allesamt verschiedene Eigenschaften sowie Funktionen und reagieren auf ganz bestimmte Umwelteinflüsse (z.B. Mausklicks).
Dein Bild (Image-Komponente/Bitmap-Komponente) hat unter anderem die Eigenschaften Left und Top. Diese Eigenschaften charakteriesieren den Abstand vom linken und vom oberen Rand deines Fensters.
Wenn du also in eine Prozedur (z.B. FormCreate - Doppelklick auf das leere Formular und du wirst in diese Prozedur geleitet) schreibst...
Quelltext
1: 2:
| Image1.Top := 20; Image2.Left := 50; |
.... wird dein Bild um 20 Pixel nach unten und 50 Pixel nach unten verschoben.
Hier einmal das Koordinatensystem in einem Delphiformular... man beachte, dass sich der Ursprung oben links befindet:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| 0 +-------------------------X | | | | | | | | Y |
Allerdings sprechen wir hier nicht von einer Bewegung. Es handelt sich hierbei eher um ein "Hüpfen".
Wenn du - wie FloSch schon ansprach - dir also eine Schleife benutzt, kannst du jedoch eine Bewegung zustande bringen. Ich rate dir jedoch davon ab. Prinzipiell hat er recht, doch wir arbeiten dann mit einer Methode, die unseren PC regelrecht ausbremst, da eine schleife selbst ohne dieses Ausbremsen so dermaßen schnell abläuft, dass wir wieder den Eindruck bekommen wieder ein "Hüpfen" gesehen zu haben
Ich gehe darauf 'mal nicht weiter ein.
Es gibt in Delphi eine Komponente Namens Timer. Du findest sie in der Kartei "System".
Was macht diese Komponente? Grob gesagt macht sie genau das, was eine Schleife macht: Sie fürht sich selbst immer wieder aus. Der Unterschied zu Schleifen besteht jedoch darin, dass ein Interval festgelegt wird, in dem der Inhalt des Timers ausgführt wird ohne die CPU bis aufs letzte auszureizen ;)
Wie gehen wir nun vor?
Nimm dir die Komponente Image und leg sie dir ins Formular (Form1).
Zudem krallst du dir auch einen Timer und legst ihn ebenfalls auf Form1.
Mit einem Doppelklick auf den Timer kommst du in die Prozedur, die nun wieder und wieder ausgeführt werden soll.
Hier schreibst du nun folgendes 'rein:
Quelltext
1: 2:
| Image1.Left := Image1.Left + 1; // (1) (2) (3) |
... was dort passiert dürfte leicht zu verstehen sein.
In Worten: wir nehmen uns die Eigenschat Left von Image1 (2) und erhöhen diese um einen Pixel (3) - das Ergebnis wird nun in Image1.Left (1) gespeichert.
Als letztes solltest du dir im Objektinspektor die Eigenschaft "Interval" von Timer 1 heraussuchen. Diese setzt du auf 100 (Millisekunden)
Das Bild bewegt sich jetzt von seinem Startpunkt aus nach rechts.
Was wir dabei gemacht haben.... einfach eine Eigenschaft in kurzen Zeitabständen nach und nach verändert.
ich hoffe, ich konnte dir helfen ;)
...
greetz
//me
P.S. - Wenn du mehr Speed willst, erhöhe die Anzahl der Pixel, um die sich dein Bild bewegen soll oder verringere den Interval des Timers.
FloSch - Mo 21.04.03 20:08
Hallo!
| t/f hat folgendes geschrieben: |
Also das Prinzip von der Bewegung einer Grafik ist denkbar einfach.
|
Meinte er nicht per Canvas einen Kreis zeichnen und diesen "bewegen" lassen? Wenn nicht, entschuldige.
| t/f hat folgendes geschrieben: |
Wenn du - wie FloSch schon ansprach - dir also eine Schleife benutzt, kannst du jedoch eine Bewegung zustande bringen. Ich rate dir jedoch davon ab. Prinzipiell hat er recht, doch wir arbeiten dann mit einer Methode, die unseren PC regelrecht ausbremst, da eine schleife selbst ohne dieses Ausbremsen so dermaßen schnell abläuft, dass wir wieder den Eindruck bekommen wieder ein "Hüpfen" gesehen zu haben
Ich gehe darauf 'mal nicht weiter ein.
|
Im Endeffekt ist ein TTimer auch nur eine Schleife die in einem eigenem Thread ausgeführt wird oder irre ich da? Es gibt einen großen Nachteil an TTimer: Er arbeitet auf längere Distanzen sehr ungenau.
Im Allgemeinen ist die Beschreibung von t/f sehr gut, solange sich der Köter (:lol:) auf eine Grafik bezieht (TImage). AFAIK meinte er aber eher einen per Canvas gezeichneten Kreis oder?
Grüße
Florian :roll:
t/f - Mo 21.04.03 20:34
| FloSch hat folgendes geschrieben: |
Hallo!
| t/f hat folgendes geschrieben: | Also das Prinzip von der Bewegung einer Grafik ist denkbar einfach.
|
Meinte er nicht per Canvas einen Kreis zeichnen und diesen "bewegen" lassen? Wenn nicht, entschuldige.
|
.. oh du hast recht, dass müsste man anders angehen.
| FloSch hat folgendes geschrieben: |
Im Endeffekt ist ein TTimer auch nur eine Schleife die in einem eigenem Thread ausgeführt wird oder irre ich da?
|
.... nö, hab ich doch geschrieben *g :wink:
greetz
//me :D
Thomas_1110 - Mo 21.04.03 21:24
Hallo t/f
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| 0 +-------------------------Y | | | | | | | | X |
Wer sich nach deinem Koordinatensystem richtet kann seine blauen Wunder erleben. X ist immer noch horizontal und Y vertikal.
Gruß Thomas
FloSch - Mo 21.04.03 21:25
Hallo,
*g* wo er recht hat hat er recht :lol:
Grüße
Florian :roll:
mimi - Mo 21.04.03 21:37
sag mal: dürft ihr DelphiX nutzen ?
ansonsten könnte ich dir mal mein Snake 1 qullcode senden(mal sehen ob du da durchsteigst)
da habe ich es ohne DelphiX gemacht ;)
t/f - Mo 21.04.03 22:48
*lol ... sorry, das passiert mir dauernd *g ... ich editiers mal eben ;) ... ich meinte es, wie du es sagtest :wink:
| Zitat: |
Es gibt einen großen Nachteil an TTimer: Er arbeitet auf längere Distanzen sehr ungenau.
|
... aber wenn es um Zeitmessung geht, dann tritt in Schleifen das gleich Problem auf. Der Grund für die "Zeitverscheibung" ist nuneinmal sowohl im Timer als auch in Schleifen die CPU-Auslastung... 8) :wink:
greetz
//me
mimi - Mo 21.04.03 23:42
Nimmt doch einfach den "Multimedia Timer" ;)
z.b. von DelphiX, ich habe auch ein buch wo genau das drinen steht wie sowas geht, kann ja mal schauen ob ich dieses Beispiel finde ;)
t/f - Di 22.04.03 01:14
Was macht den ein Multimedia-Timer anders? (Sowas gibts in Delphi 6 nich:( )
Thomas_1110 - Di 22.04.03 06:03
| t/f hat folgendes geschrieben: |
| Was macht den ein Multimedia-Timer anders? (Sowas gibts in Delphi 6 nich:( ) |
Hallo
Wenn du dir DelphiX downloadest gibts es schon (hab hier irgendwo mal einen Link gesehen). Und der Timer heißt "DxTimer".
Gruß Thomas
t/f - Di 22.04.03 11:16
und was leistet der timer? (ich könnte mir vorstellen, dass er schneller ist...)
greetz
//me
FloSch - Di 22.04.03 11:23
Hallo,
also wenn der Timer schneller ist würde ich ihn keineswegs benutzen wollen :lol:
Der Timer ist immer nur so schnell wie du es zu Einstellen vermagst. 8)
Der Timer ist aber um weiten genauer als der TTimer.
Grüße
Florian :roll:
gestiefelter Köter - Di 22.04.03 13:45
| FloSch hat folgendes geschrieben: |
| t/f hat folgendes geschrieben: | Also das Prinzip von der Bewegung einer Grafik ist denkbar einfach.
|
Meinte er nicht per Canvas einen Kreis zeichnen und diesen "bewegen" lassen? Wenn nicht, entschuldige.
|
Das meinte ich und was ist dann der Unterschied???
:?: :?: :?:
| FloSch hat folgendes geschrieben: |
wenn dein Informatiklehrer meint, es wäre Interessant "Grafiken" bewegen zu lassen, dann soll er dir das auch erklären. Er kann dir keine Techniken abverlangen, welche ihr nicht behandelt habt.
|
Leider hat unser Lehrer auch erst kurz vor uns angefangen Delphi zu lernen und hat daher wohl auch nicht viel mehr Ahnung als unser Kurs und zu den Techniken gibt es dass Problem, dass wir mit dem 2ten Buch grade erst angefangen haben und jede Gruppe ein Thema vortragen soll. Und Grafik ist nun mal sehr weit hinten im Buch...
FloSch - Di 22.04.03 13:51
| gestiefelter Köter hat folgendes geschrieben: |
| FloSch hat folgendes geschrieben: |
| t/f hat folgendes geschrieben: | Also das Prinzip von der Bewegung einer Grafik ist denkbar einfach.
|
Meinte er nicht per Canvas einen Kreis zeichnen und diesen "bewegen" lassen? Wenn nicht, entschuldige.
|
Das meinte ich und was ist dann der Unterschied???
:?: :?: :?:
|
Ein per Canvas gezeichneter Kreis ist nicht gleich eine Grafik wie z.B. ein TImage.
| gestiefelter Köter hat folgendes geschrieben: |
| FloSch hat folgendes geschrieben: |
wenn dein Informatiklehrer meint, es wäre Interessant "Grafiken" bewegen zu lassen, dann soll er dir das auch erklären. Er kann dir keine Techniken abverlangen, welche ihr nicht behandelt habt.
|
Leider hat unser Lehrer auch erst kurz vor uns angefangen Delphi zu lernen und hat daher wohl auch nicht viel mehr Ahnung als unser Kurs und zu den Techniken gibt es dass Problem, dass wir mit dem 2ten Buch grade erst angefangen haben und jede Gruppe ein Thema vortragen soll. Und Grafik ist nun mal sehr weit hinten im Buch... |
LOL :lol: ... leider ist das wohl die pure Warheit, die an deutschen Schulen immer mehr zunimmt, dass die Lehrer selber nicht wissen, was sie überhaupt genau unterrichten. Ist bei mir an der Schule leider auch so....
Ich schau mal, dass ich dir da ein Beispiel entwerfe...
Bis dahin,
Grüße
Florian :roll:
gestiefelter Köter - Di 22.04.03 13:59
Titel: Danke
Danke das wäre sehr nett.
FloSch - Di 22.04.03 14:41
Hallo,
ich bräuchte noch deine eMail-Adresse, damit ich dir das Beispiel für eine Kreisverschiebung schicken kann. (Kannst du mir per PM schicken)
Bzgl. Canvas kannst du dir auch zusätzlich mein Beispiel für eine Kontaktliste unter
http://www.florian-schlachter.de/?page=delphi
anschauen.
Grüße
Florian :roll:
mimi - Di 22.04.03 15:18
der DXTimer von DelphiX ist viel gleichmäsiger als der TTimer von Delphi, und er ist auch "schneller"(Glaube ich)
FloSch - Di 22.04.03 17:39
@Köter: Du hast Post
Grüße
Florian :roll:
gestiefelter Köter - Di 22.04.03 18:33
So, danke nochmal für Deine Hilfe
Grüße, gestiefelter Köter
FloSch - Di 22.04.03 18:34
Hallo,
kein Problem! :lol:
Grüße
Florian :roll:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!