Autor Beitrag
anno2007
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Do 19.03.09 21:41 
Hi, ich wieder ;).

Also, ich habe ein Hintergrundbild in eine GUI geladen. So, jetzt Habe ich 20 Spielfiguren, die unabhängig voneinander bewegbar und veränderbar sein sollen.
(Auch in der Größe, wegen 3D-Effekt.) Es handelt sich hierbei um PNG-Dateien (die ich mittlerweile mit Delphi 7 laden kann). Kann ich direkt in TImage weitere Images laden? Oder wie stellt man das am besten an?
Ich benutze Delphi außer für die Schule nicht, deshalb fehlt mir einfach die Erfahrung und ich muss lauter so *blödsinnige* Fragen stellen. Normalerweise hätte ich das mit GDI+ gemacht, aber das ist in Delphi alles ein bisschen anders.

Danke,
anno2007
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 19.03.09 23:46 
Am besten lädst du das Bild in eine Variable vom Typ TBitmap (myBitmap.LoadFromFile glaube ich ;) ), diese kannst du dann mit Canvas.Draw auf deine Zeichenfläche zeichnen.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
BlackDragon
Hält's aus hier
Beiträge: 10


Delphi 7 Prof.,Turbo Delphi 2006, #Develop
BeitragVerfasst: Fr 20.03.09 12:17 
Hi.

Mal ein kleiner Hinweis. Für "Spiele" ist GDI meistens nicht geeignet. Als Alternative und wenns 2D bleiben soll, empfehle ich die Andorra2D Grafik-Engine. Hab da selber schon ein wenig mit experimentiert und finde sie recht einfach im Handling. Außerdem gibt es einige Tutorial und Beispiele. Gerendert wird unter anderem über OpenGl und DirectX, was ein Plattformunabhängigkeit mit sich bringt.

Schau's dir einfach mal an...

Gruß

BlackDragon

_________________
EDV-Systeme verarbeiten, womit sie gefüttert werden.
Kommt Mist rein, kommt Mist raus. -André Kostolany-
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 20.03.09 16:21 
Eine etwas einfacher zu nutzende Alternative ist Suche in: Delphi-Forum, Delphi-Library FEAR2D aber die kann (noch?) bei weitem nicht so viel. Schau's dir an ob's dir reicht ;)
Mit Andorra bist du aber auf jeden Fall gut bedient.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Fr 20.03.09 16:51 
Hi,
Danke schonmal für die Antworten :).

Es soll nur ein ganz klitzekleines Spiel werden und das kann auch Plattformabhängig sein. Grundsätzlich hab ich nix gegen die Idee von BlackDragon, aber meine Zeit ist begrenzt und ich weis nicht, ob ich schnell genug mich in die Grafik-Engine einzuarbeiten.
Wenn es also einfacher gehen würde, wäre mir das sehr lieb ;).
Es geht wirklich nur darum, dass 20 Bilder übereinander gelagert und verschoben werden können.
@JayEff, zu den TBitmaps, muss man dann 20 TBitmaps erstellen, die man dann benutzen kann?
Zu deiner zweiten Idee mit Fear2D muss ich das gleiche sagen wie zu BlackDragon, wenn mir die Zeit bleiben würde, warum nicht. Falls es wirklich nicht anders geht, werde ich es mit Andorra2D probieren, aber ansonsten wäre ich euch für ein paar Tipps noch sehr Dankbar.

Danke auf jeden Fall an alle, die sich die Mühe gemacht haben und mir helfen :).

anno2007
klausiemausie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Fr 20.03.09 17:49 
wenn du 20 bilder übereinander stapeln willst, dann machs doch einfach so, is zwar umständlich, geht sicherlich auch einfacher, bzw. was hast du denn genau vor, willst du das bild hintereinander laden, so dass eine 3d verschiebung entsteht, dann würde ja auch ein image reichen in das du die unterschiedlichen bilder reinlädst, erzähl doch mal genau dein vorhaben.
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: Fr 20.03.09 19:36 
Google doch einfach mal nach Delphi und Sprites, da solltest Du das Richtige für dich finden.
Und die Einarbeitungszeit sollte gering sein.
Tipp: www.delphiforfun.org...niques/animation.htm

ub60
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Fr 20.03.09 19:45 
Hi,
also genauere Erläuterung.
Ich hab ein Spielfeld (siehe Anhang). Da kommen jetzt natürlich noch Felder drauf, aber nur um zu zeigen, dass es sich im Hintergrund um ein Bild handelt.
Da sollen jetzt 20 Figuren drauf (Als Beispiel diese Blaue). Die muss ich aber natürlich auch verschieben können auf dem Brett.

Ich hoffe das war verständlicher ;).

anno2007

/Edit:
Danke ub60 ich werde mir die Sprites ansehen und Rückmeldung geben. Ich setzte das Thema einfach mal auf gelöst.

Danke an alle :-).
Einloggen, um Attachments anzusehen!
klausiemausie
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98

Win XP, Win Vista Ultimate
Delphi 6
BeitragVerfasst: Fr 20.03.09 19:47 
nagut, da könntest du dir deine spielfigur natürlich in verschiedenen grössen abspeichern, auf dein hintergrundbild mehrere imagekomponenten legen, und halt die unterschiedlichen bilder immer da rein laden
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Fr 20.03.09 20:32 
Damit ich das richtig verstehe: Es wird ein 2D-Brettspiel mit 3D-Look, richtig? Da du ja sicherlich Darstellung und Logik trennen wirst (Sprich, dein Spielfeld wird intern ein 2D Array sein oder etwas Vergleichbares auf dem dann alle Spiel-Operationen durchgeführt werden und du zeichnest deine Oberfläche dann bezüglich dieses Arrays), könntest du doch erstmal eine simplere 2D Oberfläche machen, die *keinen* 3D-Look hat. Am besten nutzt du eine abgetrennte Prozedur, die das Spielfeld übergeben bekommt und die dann das Zeichnen übernimmt. So bist du total flexibel und brauchst, sobald dein Spiel einwandfrei läuft, nur die Anzeige-Prozedur ändern um einen ganz anderen, aufgemotzen Look zu kriegen :zustimm:
So kannst du dich zunächst auf's Wesentliche konzentrieren.

Was Fear2D betrifft, nun, ich hab bisher 2 Spiele damit gebastelt, ein kleines Fangen-Spiel sowie meinen Guitar-Hero Klon Klampfenheld, dem atm noch etwas Musik fehlt: Bisher ist nur ein Stück dabei und das ist nicht besonders gut gemacht. Es ist eine Datei für Through the Fire and the Flames dabei, wenn man die dazugehörige MP3 hat, kann man es spielen ;) Ich arbeite an 2 Creative Commons-Songs aber bin zur Zeit etwas mit dem Studium beschäftigt.

Für beides kann ich dir den Source zur Einsicht geben, falls du magst :zustimm:
Die F2D Engine hat halt einen großen Vorteil: Es ist unheimlich einfach, 2D Objekte mit einer Textur darzustellen, dabei ist die Größe der Textur egal (muss jedoch 2^x auf 2^y pixel sein) und die Größe des Objekts kann einfach angepasst werden, das Seitenverhältniss muss dabei nicht eingehalten werden. Über die Emitter hat man ein paar nette Effekte zur Verfügung die total einfach zu handhaben sind.
Die Syntax von Andorra kenne ich nicht, aber wenn sie genauso simpel wie F2D wäre, wäre F2D ja überflüssig gewesen und {user=F34r0fTh3D4rk]FotD[/user] hätte sie nicht geschrieben ;)

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Fr 20.03.09 23:23 
Hi,
Ja, genau, 2D-Spiel, 3D-Look.
An der Strategie im Hintergrund hängts nicht. Die steht auch schon zum großen Teil. Bei mir haperts an der Darstellung und die möchte ich ganz gerne so gestalten ;).
Grundsätzlich finde ich Fear2D eine nette Idee, aber ich denke das muss auch anders gehen. Die Idee mit den Sprites gefällt mir sehr gut und das Grundprinzip ist nicht schwer.
Ums mir so einfach wie möglich zu machen habe ich vor, die erste Methode von dem Link den ub60 gepostet hat umzusetzen, das sollte bei einem so kleinen Spielfeld ja kein Problem sein...

Zitat:
Sprites1 uses the simplest possible approach - for each "frame" we redraw the entire background on a TImage component and then redraw the individual sprites. Information is held in a TSpritesRec record that contains the bitmap of the image together with information about where it is now and where it will be displayed next.


Ok, soweit so gut. Allerdings bekomme ich so gut wie nix davon gebacken :(. Der Beispielquelltext ist zwar gut und schön, aber ich verstehe die Anzeige zum großen Teil nicht.
Kann mir vielleicht jemand einen klitzekleinen Beispielcode geben, wie man in ein TImage mit TBitmap zeichnet? Ich bekomme es nur mitten in die GUI hin.
Das wäre mal der allererste Ansatz, den ich bräuchte um überhaupt weiterzumachen :S.

Danke,
anno2007
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Sa 21.03.09 00:20 
user profile iconanno2007 hat folgendes geschrieben Zum zitierten Posting springen:
Kann mir vielleicht jemand einen klitzekleinen Beispielcode geben, wie man in ein TImage mit TBitmap zeichnet?
Beispielsource von Sprites1.dpr:
ausblenden Delphi-Quelltext
1:
bg.canvas.draw(0,0,image1.picture.bitmap);					

Hier wird das Bild das atm im Image ist in die Variable bg gezeichnet. Genauso kannst du umgekehrt Image1.Canvas.Draw(xKoord, yKoord, myBitmap); ein Sprite, das zuvor in myBitmap geladen wurde, auf das Image zeichnen.

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
anno2007 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 68

Win 7, Ubuntu
Delphi XE
BeitragVerfasst: Sa 21.03.09 13:08 
Hi,
perfekt, funktioniert soweit, Dankeschön :).
Ich hab das jetzt mit 1 Bild ausprobiert. Jetzt würde ich das Bild gerne verschieben.
Dazu muss ich ja den Kompletten Hintergrund neu zeichnen. (Später alle anderen Figuren wieder an ihre ursprüngliche Position zeichnen, bis jetzt hab ich ja nur 1 Bild.) Und danach das Bild wieder zeichnen, aber diesmal an eine andere Position.
So weit so gut :D. Aaaaaaaaber: Wie zeichne ich den Hintergrund neu?
Kann mir das jemand sagen?
Tut mir echt leid, aber aus dem Beispielcode Sprites1.dpr werd ich nicht schlau :(.

So, dann noch was. Wenn ich die Sprites benutze, muss ich ja zwangsläufig TBitmaps benutzen. In TBitmaps kann ich keine PNGs laaden, d.h. ich muss auf meine Schatten verzichten, weil die Teiltransparent sind. Gibt es irgendwas änhliches wie TBitmap in die man PNGs laaden kann. Wenn nicht verzichte ich auf die Schatten.

Danke!
anno2007

/EDIT: Hat sich soweit erledigt. Wenn man das Bild nochmal zeichnet gehts. (playfield.picture.LoadFromFile('Spielfeld.bmp');)

DANKESCHÖN :)