OpenScreen() BUG???

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

OpenScreen() BUG???

Beitrag 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:
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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.

:?
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Xaby
Naja schon, aber für den Aufbau eines Screens benötigt er schon DirectX 7, wodurch erst bei InitSprite() aktiviert wird.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag 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.



/:->
Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag 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. :)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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]
Zuletzt geändert von Kaeru Gaman am 25.05.2007 16:47, insgesamt 1-mal geändert.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Beitrag von RSBasic »

@Kaeru Gaman
Ich finds OK, dass er ausführlich (be)-schreibt.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten