AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DelphiX: Sternenhimmel
Thema durchsuchen
Ansicht
Themen-Optionen

DelphiX: Sternenhimmel

Ein Thema von CalganX · begonnen am 9. Mär 2003 · letzter Beitrag vom 16. Mär 2003
Antwort Antwort
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#1

DelphiX: Sternenhimmel

  Alt 9. Mär 2003, 13:58
Hi,
ich habe folgendes Problem: ich möchte, dass sich ein Sternenhimmel immer weiter nach links bewegt. Dieser Himmel ist eine einfache Grafik in einer DXImageList. Ich habe das ganze mal versucht, aber jämmerlich gescheitert (Division by zero; was auch klar ist). Folgendes in einem DXTimer:
Delphi-Quellcode:
var i: integer;
begin
  dec(counter);
  DXDraw1.Surface.Fill(0);
  for i:=1 to DXDraw1.SurfaceWidth div (128 + counter) do begin
    DXImageList1.Items[1].Draw(DXDraw1.Surface, i*(128 + counter), 0, 0);
  end;
  DrawShip(oldX, oldY);
end;
Nun: das kann nicht funktionieren. Hat denn irgendjemand eine Idee, wie man das machen könnte?

Chris

PS: Für den Anfang bitte erstmal nur eine horizontale Reihe der Bilder...
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 9. Mär 2003, 16:07
Moin!
Hab das jetzt einigermaßen hinbekommen:
Delphi-Quellcode:
procedure drawStars(mv: integer = 0);
var
  i, j: integer;
begin
  with FrmMain do begin
    for i:=1 to DXDraw1.SurfaceWidth div 128 do begin
      for j:=1 to DXDraw1.SurfaceHeight div 107 do begin
        DXImageList1.Items[1].Draw(DXDraw1.Surface, i*128 + counter, j*107, 0);
      end;
    end;
  end;
end;
Allerdings werden die Sterne nicht oben in der Ecke gemalt, sondern irgendwo weiter unten. Was muss ich da ändern?

Chris
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#3
  Alt 9. Mär 2003, 16:08
kannste nicht 2 objekte mit gleichem bild nehmen, und diese dann hintereinander setzen, und wenn das erste objekt aus linken rand läüft, dann wieder nach ganz rechts setzen, und immer so weiter.

gruss haegar
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#4
  Alt 9. Mär 2003, 16:13
??? Wie meinst du das?? genauer: kannst du mir da vielleicht ein wenig Source geben?

Chris
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#5
  Alt 9. Mär 2003, 16:20
naja das mit dem source is sone sache ),. bin ja selber noch neuling in DelphiX, aber ich versuchs nochmal dir das zu erklären.
also du nimmst 2 objekte. diese haben als bild deinen sternenhimmel. die grösse entspricht genau dem bildschirmausschnitt, in dem es sich bewegt.
nun lässte du das 1.objekt von rechts nach links laufen! irgenwann ist dann der linke rand des objektes genau am linken rand des bildschirms. da das auch für den rechten rand zutrifft, musst du nun das 2. objekt gleich hintendran bewegen, damit keine lücken entstehen. jetzt käuft das alles weiter, und wenn nun der rechte rand des 1. objektes am linken rand des bildschirmes ist,dann setzt du es wieder an die anfangsposition, und es kann erneut von rechts nach links laufen.

so besser
wenn nicht, dann könnte ich versuchen dir das annem kleinen beispielprogramm zu zeigen.

gruss haegar
  Mit Zitat antworten Zitat
Haegar

Registriert seit: 10. Dez 2002
Ort: Peitz
319 Beiträge
 
Delphi 7 Professional
 
#6
  Alt 9. Mär 2003, 16:23
aso, hatte den 2. post erst jetzt gesehen, sry
  Mit Zitat antworten Zitat
arnoldo

Registriert seit: 8. Dez 2002
Ort: Berlin
131 Beiträge
 
Delphi 7 Personal
 
#7
  Alt 16. Mär 2003, 14:03
Hallo Chakotay1308,

also eine recht flüssige Bewegung erreichst Du unter DelphiX wenn Du
die SpriteEngine benutzt. Am Besten mit den Hintergrundsprites.

Hier ein paar Zeilen:

Code:
...
TBack = class(TBackgroundsprite)
public
 procedure DoMove(MoveCount: Integer);override;
end;

var
  MainForm: TMainForm;
  hg:tback;


implementation

{$R *.dfm}

procedure tback.DoMove(MoveCount: Integer);
begin
 inherited;
 x:=x-3;//die sterne werden pro frame um 3 pixel bewegt
end;

procedure TMainForm.FormCreate(Sender: TObject);
begin
 //Hintergrund wird geladen
 hg:=tback.Create(dxspriteengine1.Engine);
 hg.SetMapSize(1,1); //spielt bei hg.tile=true keine Rolle
 hg.Image:=DXImageList1.Items.Find('kachel'); //Die einzelne Grafik
 hg.Tile:=true; //Kacheleffekt
 hg.Z:=0;
end;

//Der Timer
procedure TMainForm.time(Sender: TObject; LagCount: Integer);
begin
 if not DXDraw1.CanDraw then Exit;
 dxspriteengine1.Move(0); // Sprites werden bewegt
 dxspriteengine1.Draw;   // und gezeichnet
 DXDraw1.Flip;           // Grafik wird ausgegeben
end;

end.
Fertig, dass war es schon. Die Grafik liegt in der Imagelist und
wird automatisch 'gekachelt'.

Gruss, arnoldo

P.S. Code auch im Anhang
Angehängte Dateien
Dateityp: zip sternenhimmel.zip (19,6 KB, 28x aufgerufen)
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8
  Alt 16. Mär 2003, 14:23
Hi,
danke! Das funktioniert prima! Allerdings gibt es einen kleinen Schönheitsfehler: die Sprite liegt irgendwie über dem Schiff. Ich denke aber, dass ich den Fehler schon gefunden habe...

Chris
  Mit Zitat antworten Zitat
arnoldo

Registriert seit: 8. Dez 2002
Ort: Berlin
131 Beiträge
 
Delphi 7 Personal
 
#9
  Alt 16. Mär 2003, 15:58
Der 'Fehler' liegt am Z-Wert ('Höhenwert') der Sprites, setze
einfach hg.z:=-2 -> dann müsste es klappen.

Apropos Sprites, schau Dir mal im Thread Vorbei fliegendr Hintergrund
mein etwas ausführlicheres Beispiel (Raumschiff-Demo) an,
ich hoffe es hilft Dir weiter...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz