Autor Beitrag
MadMaX
Hält's aus hier
Beiträge: 7

WinME, Win2000Pro, SuSE Linux 8.2
Delphi 6 Enterprise
BeitragVerfasst: Di 10.02.04 18:15 
Hallo,
ich hab da mal wieder ein Problem....ich programmiere an einem 2D Spiel.
Ich lade eine Leveltextur anhand eines JPEG Bildes in eine DXdraw box.
Ihr werdet es ja sicher von Strategiespielen kennen, dass wenn man mit der Maus an den Bildschirmrand kommt, die Map in die entsprechende Richtung scrollt.
Nun ist meine Frage wahrscheinlich offensichtlich .... Wie programmiert man das?
Ich habe schon das Forum und Google durchsucht, aber nichts passendes gefunden...kann aber sein, dass ich auch einfach nur zu blöd bin :wink: .
Ich möchte garkein Codebeispiel haben, nur ein paar Anregungen wie man das realisieren könnte.

Schönen Abend noch
Max
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Mi 11.02.04 16:05 
Du mußt sinfach herausfinden, wann die Maus am Bildschirmrand ist.

Schau dir mal "getcursorpos" an.

Gruß Umpani

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
MadMaX Threadstarter
Hält's aus hier
Beiträge: 7

WinME, Win2000Pro, SuSE Linux 8.2
Delphi 6 Enterprise
BeitragVerfasst: Mi 11.02.04 17:02 
Erstmal danke für deine Antwort...
aber momentan fange ich an zu zweifeln ob es wirklich ratsam ist DelphiX zu benutzen, hat OpenGl nicht viel bessere Möglichkeiten?
Z.B.: Wenn ich bei meinem Spiel Einheiten animieren will, kann ich ja nicht einfach ein Jpeg von nem Menschen u.a nehmen. Das würde ja etwas sch**** aussehen. In OpenGL könnte ich mir da doch mit Modells behelfen, oder sehe ich das flasch und kenne nur nicht die Möglichkeiten die man bei DelphiX hat?
Gruß
Max
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Mi 11.02.04 19:28 
Das hat aber nun mit Deiner Frage nichts zu tun. Der o.g. Befehl ist nicht Inhalt von DelphiX.

DelphiX ist ein veraltetes Grafiksystem. Wenn man Grafiken im 2D Bereich macht, reicht es vollkommen aus. Wenn Du aber echtzeit 3D Grafiken haben möchtest, dann ist dies nur schwer möglich.

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
MadMaX Threadstarter
Hält's aus hier
Beiträge: 7

WinME, Win2000Pro, SuSE Linux 8.2
Delphi 6 Enterprise
BeitragVerfasst: Mi 11.02.04 19:52 
Ja, das mit dem Bild scrollen funzt auch alles super...danke,
nur noch ein Problem...ich lasse das Bild durch die Onclick Eigenschaft von der DXDraw box zeichnen. D.h. ich muss erst klicken bevor gescrollt wird, wie änder ich das? Kann ich den Drawbefehl in eine Oncreate Eigenschaft packen und immerwieder "refreshen" ?? Oder gehts ganz anders?

Zitat:
Das hat aber nun mit Deiner Frage nichts zu tun. Der o.g. Befehl ist nicht Inhalt von DelphiX.


Ich weiß, aber bevor ich anfange das Ganze in DelphiX zu machen und später feststelle, dass es sinnlos war, frag ich lieber voher...

Zitat:
Wenn man Grafiken im 2D Bereich macht, reicht es vollkommen aus. Wenn Du aber echtzeit 3D Grafiken haben möchtest, dann ist dies nur schwer möglich.


Ich wollte ein Spiel machen, das sich so im Rahmen in der Grafik von Starcraft befindet...Also muss nicht so toll sein, ich denke da wird DelphiX schon ok sein.
Aber wenn ich Einheiten animieren will...wie mach ich das in DelphiX? In OpenGL gibts ja die Möglichkeit der Einbindung von Modells.

Gruß Max
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Mi 11.02.04 20:01 
Ganz einfach die Grafiken mit einem 3D Programm rendern lasse und dann in eine dximagelist einladen.

Für das "refreshen" benutzt du ganz einfach eine tdxtimer komponente.

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius
MadMaX Threadstarter
Hält's aus hier
Beiträge: 7

WinME, Win2000Pro, SuSE Linux 8.2
Delphi 6 Enterprise
BeitragVerfasst: Mi 11.02.04 21:47 
Zitat:
Ganz einfach die Grafiken mit einem 3D Programm rendern lasse


Alllsooo...d.h.: Ich hole mir eine 3D Software wie 3D Studio Max, oder Milkshape??!! Dann mach ich mir meine Einheit damit. Aber dann hab ich doch wieder ein viereckiges jpeg oder gif, das würde man doch sehen, wenn nacher um die Einheiten ein 4-eckiger andersfarbiger Rand ist...ausserdem will ich ja auch, dass sich die Einheiten "bewegen".


Zitat:
Für das "refreshen" benutzt du ganz einfach eine tdxtimer komponente


Ich lasse also einfach den Timer den Draw Vorgang 25 mal in der Sekunde machen(Damits flüssig ist)??
Seniman
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 42


D6 Pers
BeitragVerfasst: Mi 11.02.04 23:03 
Hallo MadMaX,

MadMaX hat folgendes geschrieben:

Aber dann hab ich doch wieder ein viereckiges jpeg oder gif, das würde man doch sehen, wenn nacher um die Einheiten ein 4-eckiger andersfarbiger Rand ist...ausserdem will ich ja auch, dass sich die Einheiten "bewegen".

Die Bilder bei DelphiX kannst du teilweise transparent machen. Sprich, zu zeichnest (oder renderst) die Figur und malst den den Hintergrund, der nicht angezeigt werden soll, in irgendeiner auffälligen Farbe an, z.B. rosa (fuchsia). Wenn du das Bild dann in die DxImageList lädst stellst du die Eigenschaft TransparentColor (oder so ähnlich) auf Fuchsia. Wenn du das Bild jetzt zeichnest, dann wird nur das gezeichnet, was in dem Bild nicht rosa war.
Wenn du die Einheiten bewegen willst, dann schau dir Tutorials zu DelphiX an, da wird erklärt, wie man mehrere Bilder zu einer Animation machen kann.

MadMaX hat folgendes geschrieben:

Ich lasse also einfach den Timer den Draw Vorgang 25 mal in der Sekunde machen(Damits flüssig ist)??

Genau so geht das.

Grüße
Seniman
MadMaX Threadstarter
Hält's aus hier
Beiträge: 7

WinME, Win2000Pro, SuSE Linux 8.2
Delphi 6 Enterprise
BeitragVerfasst: Do 12.02.04 18:10 
Ok, danke. Das mit der Transparenz wird wohl noch machbar sein...dennoch hab ich schon wieder ein Problem was den Timer angeht...
Also ich versuche ja mit der Maus über den Bildschirm zu scrollen,
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
[...]y:=1;
if mouseposition.Y > 600 then
   begin
   y := y - 10;
end;

DXDraw1.Surface.Fill(0);
DXImageList1.Items[3].draw(DXDraw1.Surface, x, y, 0);
DXDraw1.Flip;[...]

So, erstmal sobald ich eine While oder For Schleife benutze, wie es ja ein normaler Mensch machen würde, braucht er 2 Minuten zum Compilen und meine Prozessorlast beim Ausführen ist 100%, ausserdem seh ich nur einen schwarzen Bildschirm...aber das soll mir egal sein mit IF gehts ja auch. Das dumme ist nur, dass mir der Timer bei jedes mal die Variablen zurücksetzt und das Scrollen deshalb nur einmal funzt....
wie beseitige ich das Problem?
Gruß
MaX
umpani
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 389



BeitragVerfasst: Do 12.02.04 19:15 
Dann mußt du die Variable nicht in der Procedure onTImer definieren, sondern global.

Gruß Umpani

_________________
Lernen, ohne zu denken, ist eitel; denken, ohne zu lernen, ist gefährlich. Konfuzius