Seite 1 von 1

OpenScreen() BUG???

Verfasst: 25.05.2007 15:09
von Xaby

Code: Alles auswählen

ExamineDesktops() 

;InitSprite() ; 
OpenScreen(DesktopWidth(0),DesktopHeight(0),DesktopDepth(0),"Ball") 

InitKeyboard() 
InitMouse() 

Repeat 
  Delay(1) 
  ClearScreen(0) 
  
  ExamineKeyboard() 
  ExamineMouse() 
    
  
  FlipBuffers() 
Until KeyboardPushed(#PB_Key_Escape) 
Wieso geht mein Programm nicht ordentlich an? Welcher Fehler liegt bei OpenScreen() vor?

Memory ... invalid ...
ebenfalls hier:
http://www.purebasic.fr/german/viewtopic.php?t=13067

Aber wieso? :?

:roll:

Verfasst: 25.05.2007 15:10
von RSBasic
@Xaby
Das ist kein Bug, sondern du musst vorher mit InitSprite() initialisieren.
Aber du hast anscheinend ausgeblendet, also ;

Code: Alles auswählen

ExamineDesktops() 

InitSprite() ;<<<Dies darfst du nicht ausblenden!  :) 
OpenScreen(DesktopWidth(0),DesktopHeight(0),DesktopDepth(0),"Ball") 

InitKeyboard() 
InitMouse() 

Repeat 
  Delay(1) 
  ClearScreen(0) 
  
  ExamineKeyboard() 
  ExamineMouse() 
    
  
  FlipBuffers() 
Until KeyboardPushed(#PB_Key_Escape)

Verfasst: 25.05.2007 15:52
von Xaby
Wieso muss ich die Sprites initialisieren?

Wenn ich gar keine Sprites in meinem Programm benutzen will?

Wenn es nicht ohne geht, dann braucht man den InitSprite-Befehl gar nicht und kann ihn gleich mit OpenScreen() ausführen lassen.

Also entweder ist OpenScreen() von InitSprites() abhängig, was den InitSprite()-Befehl unsinnig macht.

Oder es ist ein Bug und deshalb benötigt OpenScreen() zwingend InitSprites()

Oder wie siehst du das?

Komisch ist ja, das OpenScreen in der Sprite-Libary zu finden ist.
Aber noch komischer finde ich, dass in der Hilfe nicht steht, dass man InitSprite vor allem immer vor OpenScreen() benutzen muss.
Und wie gesagt, sollte das der Fall sein, dann ist es quatsch daraus zwei Befehle zu machen.

:?

Verfasst: 25.05.2007 15:57
von RSBasic
@Xaby
Naja schon, aber für den Aufbau eines Screens benötigt er schon DirectX 7, wodurch erst bei InitSprite() aktiviert wird.

Verfasst: 25.05.2007 16:10
von Xaby
Ich kann aber auch keine Sprites() benutzen, wenn ich nicht OpenScreen() benutzt habe.

Wenn eins das andere dedingt, sehe ich keinen Sinn in zwei Befehlen.
Da man ja immer beide benötigt.

Oder irre ich mich?

Sinn von Prozeduren ist es doch, dass sie wie Module ausgetauscht werden können.

Wenn ich die Maus benutzen will, nehme ich InitMouse()
Für die Tastatur InitKeyBoard()
Für GameController: InitJoystick()
Und für Sprites() InitSprite()

Will ich nun ein Fenster machen benutze ich
OpenWindow()

Will ich eine Console benutzen: OpenConsole()

Will ich einen Grafikfähigen Screen öffnen:

OpenScreen()

Und wenn ich diesen nur mit Maus und Tastatur und einigen Grafikelementen wie den 2D-Zeichenfunktionen
"InitDrawing() :mrgreen: "
benutzen will, ist es für mich einfach unlogisch, wieso ich dennoch InitSprite() schreiben muss.

Jetzt könnstest du sagen, ja InitMouse() und InitKayBoard() ... etc. funktionieren ja auch nicht ohne OpenScreen().

Geb ich dir Recht.

Benötigt OpenScreen oder OpenWindowedScreen()
Müsste rein von der Logik auch in der Sprite-Bibliothek stehen.
Oder wenigstens in der KeyBoard-Hilfe, dass es benötigt wird.

Code: Alles auswählen

InitMouse()
InitKeyboard()

Repeat
  ExamineKeyboard()
  
Until KeyboardPushed(#PB_Key_Escape) 

Code: Alles auswählen

InitSprite()
CreateSprite(0,32,32)
Start.l=ElapsedMilliseconds()
Repeat
  
Until ElapsedMilliseconds()-3000<0

Linker-Fehler ohne Ende

Code: Alles auswählen

OpenScreen(800,600,32,"Test")
Start.l=ElapsedMilliseconds()
Repeat
  
Until ElapsedMilliseconds()-3000<0
RSBasic hat geschrieben:Naja schon, aber für den Aufbau eines Screens benötigt er schon DirectX 7, wodurch erst bei InitSprite() aktiviert wird.
Klingt logisch. Dann sollte der Befehl aber lauten:
InitGraphic() oder InitScreen(....)
Als zusammengefasster OpenScreen und InitSprite-Befehl...

Denn man braucht diesen Befehl ja nicht nur für die Sprites, sondern immer, wenn man OpenScreen() benötigt.
Und das benötigt man bei allen grafischen Dingen, die nicht auf Images in Fenstern basieren.



/:->

Verfasst: 25.05.2007 16:24
von RSBasic
@Xaby
Naja mal kurz und knapp <)
Also vielleicht hat der "Andrè" einfach nur vergessen, dies dazu zuschreiben.
Aber genau direkt, was du angedeutet hast, kann ich nicht richtig beantworten, du kannst aber (wenn du Lust/Zeit hast) an "Andrè" eine E-Mail schreiben und er kann dann seine Kollegen kontaktieren.
Oder du wartest einfach ab, vielleicht weißt jemand besser bescheid. :)

Verfasst: 25.05.2007 16:36
von Kaeru Gaman
PB-Help hat geschrieben:PureBasic - Sprite
...
Da die Sprites eng mit dem Bildschirm ('Screen') verknüpft sind, wurden die Screen-relevanten Befehle in die Sprite-Library integriert (dies kann sich später ändern). Nach dem Initialisieren der Screen- und Sprite-Umgebung mittels InitSprite() können Sie mit dem Öffnen eines Bildschirms als Vollbilds oder im Fenster beginnen.
...
es besteht kein bedarf, bei jedem befehl einzeln zu schreiben, man müsse erst InitSprite() benutzen,
wenn das im einleitenden absatz der gesamten Sprite&Screen-Lib ausdrücklich gesagt wird.


außerdem kann man screens wieder schließen und einen neuen öffnen,
im selben programm, aber die Sprite&Screen-Lib muss man nur einmal initialisieren.

[möp]

Verfasst: 25.05.2007 16:41
von RSBasic
@Kaeru Gaman
Ich finds OK, dass er ausführlich (be)-schreibt.

Verfasst: 25.05.2007 16:48
von ts-soft
RSBasic hat geschrieben:@Kaeru Gaman
Ich finds OK, dass er ausführlich (be)-schreibt.
Dann solltet ihr beiden Chatten. Ich mag das weitausholende Geschreibsel
nicht mehr lesen.