Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Di Jul 15, 2025 20:43

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: SDL_Rect problem
BeitragVerfasst: Sa Sep 11, 2004 15:04 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
hi leute, hab da ein problem mit sdl_rect in delphi, naja, nicht direkt mit sdl_rect sondern mit seiner verwendung

Code:
  1.  
  2. procedure player_coords();
  3. begin
  4. player_r.x := 200;
  5. player_r.y := 200;
  6. end;
  7.  


funktioniert alles wunderbar, in var hab ich player_r : PSDL_Rect; stehen, von daher gibt er es wunderbar aus, nur im sobald ich es in meine hauptschleife lad

Code:
  1.  
  2.  
  3. procedure player_blit();
  4. begin
  5. SDL_BlitSurface(player,nil,screen,@player_r);
  6. end;
  7.  
  8. begin
  9.   init_sdl();
  10.   player_surface();
  11.  
  12.   while(not done) do
  13.     while SDL_PollEvent(@event) = 1 do
  14.       begin
  15.  
  16.          player_coords();
  17.    
  18.  
  19.          player_blit();
  20.          SDL_UpdateRect(screen,0,0,0,0);
  21.          SDL_Flip(screen);
  22.   end;
  23. end.
  24.  


beendet das programm sofort nach dem starten wieder

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 11, 2004 16:35 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Beendet es wirklich kommentarlos? Passiert dies nur, wenn Du player_coords aufrufst? Bedenkst Du, dass PSDL_RECT ein Pointer ist und entsprechend reserviert werden muss? Ich vermute stark, dass Du von einer C/C++-Quelle portiert hast und eine TSDL_RECT existiert. Das würde ich vorziehen und somit auch diese ganze Pointergeschichte somit umgehen. Problem behoben? ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 11, 2004 16:53 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
also, das programm schließt zu schnell um irgendwas mitzubekommen, es öffnet sich nur das text fenster


hier mal d code, hab vorher mit c++ gearbeitet, vielleicht liegt der fehler daran
Code:
  1.  
  2. program sdl_game;
  3.  
  4. {$APPTYPE CONSOLE}
  5.  
  6. uses
  7.   SysUtils,SDL;
  8.  
  9. var
  10.   screen : PSDL_Surface;
  11.  
  12.   event : TSDL_Event;
  13.  
  14.   player: PSDL_Surface;
  15.   player_r: PSDL_Rect;
  16.  
  17.   height: integer = 640;
  18.   width: integer = 480;
  19.   depth: integer = 32;
  20.   flags: integer = SDL_HWSURFACE;
  21.  
  22.   done: boolean = false;
  23.  
  24.  
  25.  
  26.  
  27. procedure init_sdl();
  28. begin
  29.   SDL_Init(SDL_INIT_VIDEO);
  30.   if(SDL_Init(SDL_INIT_VIDEO) < 0) then
  31.   begin
  32.     write(SDL_GetError());
  33.   end;
  34.  
  35.   screen := SDL_SetVideoMode(height,width,depth,flags);
  36.   SDL_WM_SetCaption('SDL Game HaschHase',nil);
  37.  
  38. end;
  39.  
  40.  
  41. procedure player_surface();
  42. begin
  43.   player := SDL_LoadBMP('player.bmp');
  44.   SDL_SetColorKey(player,SDL_SRCCOLORKEY,SDL_MapRGB(player.format,000,000,000));
  45. end;
  46.  
  47. procedure player_coords();
  48. begin
  49. player_r.x := 200;
  50. player_r.y := 200;
  51. end;
  52.  
  53. procedure player_blit();
  54. begin
  55. SDL_BlitSurface(player,nil,screen,@player_r);
  56. end;
  57.  
  58. begin
  59.   init_sdl();
  60.   player_surface();
  61.  
  62.   while(not done) do
  63.     while SDL_PollEvent(@event) = 1 do
  64.       begin
  65.  
  66.          player_coords();
  67.    
  68.  
  69.          player_blit();
  70.          SDL_UpdateRect(screen,0,0,0,0);
  71.          SDL_Flip(screen);
  72.   end;
  73. end.
  74.  

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 11, 2004 19:39 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Naja, mal die Zeiel auskommentieren oder einen Breakpoint, wird ja wohl drinne sein oder? Hast Du meine Ratschläge überhaupt beherzigt und was waren deren Ergebnisse?

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 11, 2004 22:14 
Offline
DGL Member

Registriert: Do Apr 29, 2004 11:53
Beiträge: 29
das ist alles was du siehst, und ich weis net was du von mir willst

er gibt keinen fehler aus, er schließt einfach das program, wo ich keine ahung hab woran das liegt

_________________
wtf?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 11, 2004 22:51 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Du hast einen Breakpoint in der ersten Zeile des Programms gesetzt und er wurde nicht durchlaufen? Sicher!?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Sep 11, 2004 23:41 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
ich will gar nichts von dir, sondern anders herum und irgendwie habe ich das Gefühl dass Du nicht auf meine Hilfestellung eingehest.
1. Kommentiere player_coords(); aus :
Code:
  1. // player_coords();
Beendet er dann immer noch Grundlos?
2. Hast Du PSDL_RECT durch ein TSDL_RECT ausgetauscht?
Ansonsten solltest Du Dich unbedingt mit dem Debuggen von Programmen befassen. Wir haben dazu auch ein Tutorial von Delphic. So ohne es nachzubauen und uns einzuarbeiten fällt es ohne konkrete Frage schwer eine Lösung zu finden. Zudem fällt es mir schwer zu Glauben, dass er das Programm einfach so beendet, da ich eigentlich mit einer Exception rechnen würde. Es könnte sich von daher lohnen die eigentliche Renderloop in ein try..except zu setzen und entsprechend eine Meldung auszugeben.
Den die einzige Situation in der er hier das Programm ohne irgend eine Darstellung beenden sollte wäre wenn das Programm korrekt initalisiert wird. Das sehe ich spontan allerdings nirgends. Setze einmal eine Meldung beim Ende des Programmes, dann siehst Du schnell, ob er vorher irgendwo aussteigt ohne aus irgend einen Grund die Schleife vorzeitig verläßt. Tut er dies, nehme nacheinander die einzelnen Anweisungen aus der Loop und voila schon hast Du jene, die das Problem verursacht und man kann sich diese genauer ansehen.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Mai 31, 2007 20:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
ich hatte gerade das selbe problem - also dass sich das programm ohne große worte verabschiedet.

ich habe dann dst und src nicht als PSDL_Rect sondern als TSDL_Rect deklariert.
dann hat sich allerdings die blit funktion beschwert, weil die PSDL_Rect erwartet
und zum guten schluß habe ich im aufruf der blit funktion ein @ vor src und dst gesetzt, nun lüppt's

ich weiß, dass dieser thread ein paar jahre als ist und dem thread-starter durch diese antwort vermutlich nicht mehr geholfen werden kann - aber ich hatte gerade so nen "HA! Nich mit mir, elendes Delphi - So nicht! HARHARHAR" - Moment 8)


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 5 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]