Seite 2 von 3

Verfasst: 27.02.2009 21:51
von Mok
Kaeru Gaman hat geschrieben:> If ExamineKeyboard() = 0 Or ExamineMouse() = 0
hier brauchst du keinen Rückgabewert prüfen.
du brauchst nur beide inits benutzen.
prüfen tust du dann die Rückgabewerte der Auswertungsfunktionen...
und wenn du die rückgaben von MouseX() und MouseY() schon zwischenspeicherst,
solltest du im Display auch die Variablen und nicht die Funktionen verwenden.
[Dummheit ein]Ich versteh einfach nicht's mehr[Dummheit aus]

Verfasst: 27.02.2009 21:54
von Kaeru Gaman
boah :roll: /:->

Code: Alles auswählen

  If ExamineKeyboard() = 0 Or ExamineMouse() = 0 ;Eines der Beiden oder beides ist NULL (warum?)
    CloseScreen()
    MessageRequester("Info","Fehler!",0)
    End
  EndIf 
ist überflüssig.

Code: Alles auswählen

  ExamineKeyboard()
  ExamineMouse()
genügt.


und du hast

Code: Alles auswählen

MouseX = MouseX() : MouseY = MouseY() 
du packst also die Rückgaben der Prüffunktionen in Variablen.
also solltest du später, im DisplaySprite, die Variablen verwenden nicht die Funktionen.

Verfasst: 27.02.2009 22:08
von Mok
Ja, ok, jetzt hab ich's verstanden, aber mich hauts na ca. einer halben Sekunde wieder raus, und PB motzt auch noch wegen dem StartDrawing() (eben weil der Screen nimmer aktiv ist)

Verfasst: 27.02.2009 22:11
von Kaeru Gaman
na das ist ja schön für dich, dann bau halt keine Bugs ein! /:->

Verfasst: 27.02.2009 22:35
von Mok
Kaeru Gaman hat geschrieben:na das ist ja schön für dich, dann bau halt keine Bugs ein! /:->
Na danke

Verfasst: 27.02.2009 22:41
von Kaeru Gaman
Mok hat geschrieben:
Kaeru Gaman hat geschrieben:na das ist ja schön für dich, dann bau halt keine Bugs ein! /:->
Na danke
zu deutsch: wenn du hilfe brauchst, frag konkret und poste code. ;)

ansonsten kann ich dir nur so helfen:

> aber mich hauts na ca. einer halben Sekunde wieder raus
dann stell den Raushau-Timer auf mehr als 500ms

> und PB motzt auch noch wegen dem StartDrawing() (eben weil der Screen nimmer aktiv ist)
dann nimm nen aktiven screen

Verfasst: 27.02.2009 22:47
von Mok
War da der Erfinder der Stupidedia am Werk :mrgreen: "dann stell den Raushau-Timer auf mehr als 500ms"

Die Sache ist die: Normalerweise müsste die kurze Schleife doch laufen, tja, das tut sie auch, aber in der Schleife drin is das Problem: Examinekeyboard() und/oder ExamineMouse() liefern den Wert NULL (auch wenn das Code-Stück, wie du gesagt hast, umsonst war). Jedenfalls ist da irgend ein Hund drin, der den Screen wieder schließt.
Ich poste jetzt mal den kanzen Ko...Code bis zur Schleife:

Code: Alles auswählen

;-Initialisierung:
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
  MessageBox_(#Null,"Eine oder mehrere Libraries für das Programm"+Chr(13)+"Aimer v1.00 konnten nicht initialisiert werden!"+Chr(13)+"Neuinstallation des Programmes könnte das Problem beheben.","Fehler beim Initialisieren",#MB_OK | #MB_ICONSTOP)
  End
EndIf

;KONSTANTEN
#NoAction = 0
#Released = 1
#Clicked  = 2
#Dragged  = 3

Define MLB.l    ; Mouse Left Button
Define MRB.l    ; Mouse Right Button 

;VARIABLEN
Global rand_backgrnd.b
Global released
Global MouseX, MouseY
Global ZielX, ZielY
Global speed
Global Console, Cheat ;Die kommen dann nachher zum Einsatz
Global WType.s
Global ChosenGun

WType.s = ""
Cheat = #False
ShotsLeft = Magazine
speed = 1

;-STRUKTUREN
Structure Weapons
  Name.s
  Magazine.b
  ShootSound.s
  DrySound.s
  MuniSprite.s
  TickShot.b
  TickDry.b
  TickReload.b
EndStructure



Select ProgramParameter()
  Case "/SETTINGS"
    If RunProgram("startmgr.exe")
      End
    Else
      MessageBox_(#Null,"startmgr.exe kann nicht gefunden werden!"+Chr(10)+"Neuinstallation könnte den Fehler beheben","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
      End
    EndIf
  Case "/CONSOLE"
    Console = #True ;ebenfalls für nachher
EndSelect
    
;-Vorbereitung:
If OpenPreferences("settings.prefs")
  width = Val(ReadPreferenceString("ScreenWidth","1024"))
  height = Val(ReadPreferenceString("ScreenHeight","768"))
  depth = Val(ReadPreferenceString("Depth","32"))
Else
  MessageBox_(#Null,"settings.prefs kann nicht gefunden werden!"+Chr(10)+"Neuinstallation könnte den Fehler beheben","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
  End
EndIf
If OpenScreen(width,height,depth,"Aimer v1.00") = 0
  MessageBox_(#Null,"Es konnte kein "+Str(width)+"x"+Str(height)+"x"+Str(depth)+" Bildschirm erstellt werden!","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
  End
EndIf

rand_backgrnd = Random(3)
rand_backgrnd = rand_backgrnd + 1

fontID = LoadFont(100,"Arial",12,#PB_Font_Bold)

Global Dim Guns.Weapons(2)

;PUMPGUN SETTINGS
Guns(0)\Name = "Pump"
Guns(0)\Magazine = 8
Guns(0)\TickShot = 10
Guns(0)\TickDry = 2
Guns(0)\TickReload = 17

;AK74 SETTINGS
Guns(1)\Name = "AK74"
Guns(1)\Magazine = 30
Guns(1)\TickShot = 2
Guns(1)\TickDry = 3
Guns(1)\TickReload = 23

;GLOCK 19 SETTINGS
Guns(2)\Name = "Glock"
Guns(2)\Magazine = 30
Guns(2)\TickShot = 7
Guns(2)\TickDry = 3
Guns(2)\TickReload = 10 

LoadSprite(1,"data\gfx\ak74thm.bmp");
  TransparentSpriteColor(1,RGB(255,0,255));
LoadSprite(2,"data\gfx\glock19thm.bmp");
  TransparentSpriteColor(2,RGB(255,0,255));
LoadSprite(3,"data\gfx\ak74thm.bmp");
  TransparentSpriteColor(3,RGB(255,0,255));
LoadSprite(012,"data\gfx\mouse.bmp")
  TransparentSpriteColor(012,RGB(255,0,255));
cont = 0
;Problemschleife:
Repeat
  
  ExamineKeyboard()
  ExamineMouse()
  
  MouseX = MouseX() : MouseY = MouseY()
  
  DisplayTransparentSprite(1,0,0);
  DisplayTransparentSprite(2,500,200);
  DisplayTransparentSprite(3,800,400);
  DisplayTransparentSprite(012,MouseX,MouseY);
  
  If MouseButton(#PB_MouseButton_Left)
    WType.s = "ak74"
    ChosenGun = 0
    cont = 1
  EndIf
  
  If MouseButton(#PB_MouseButton_Right)
    WType.s = "glock"
    ChosenGun = 2
    cont = 1
  EndIf
  
  If MouseButton(#PB_MouseButton_Middle)
    WType.s = "pump"
    ChosenGun = 1
    cont = 1
  EndIf
  ;Hat irgendwas mit SpritePixelCollision() nicht gefunzt, deshalb vorübergehend auf Linksklick, Rechts- und Mittelklick geändert.
  StartDrawing(ScreenOutput())
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(fontID)
      DrawText(5,20,Str(coll),RGB(255,255,255))    
    DrawText(5,5,"ESC - Beenden" )
  StopDrawing()
  
  FlipBuffers()
  
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
Until cont <> 0
MfG, Mok

Verfasst: 27.02.2009 23:01
von Kaeru Gaman
noja... testen kann ich da nix, viel zu viele abhängigkeiten.
selbst wenn ich versuche die sprites zu ersetzen nölt der weil er keine prefs findet. ätzend.
setz doch wenigstens ein paar vorab konstanten, dass man mal was starten kann!
aber wenn man ne halbe stunde arbeiten muss, um das zum laufen zu bringen, macht es keinen spaß, zu versuchen, dir zu helfen!


an der schleife seh ich nix, keine ahnung was du anstellst dass das nicht läuft.

[edith]

also:
nachdem ich die variablen width, height, depth manuell gesetzt hab, geht es.

und es geht wirklich.
abgesehen davon, dass du kein ClearScreen verwendest und alles übereinanderschmiert,
läuft die schleife bei mit rund durch.
mit beliebigem mausklick wird beendet.

die sprites sitzen etwas unglücklich, und du lädst zweimal das gleiche.

Verfasst: 28.02.2009 00:05
von Mok
Tja, dann ist das wohl Prefs-bedingt, aber bei ReadPreferenceString() wird ja auch ein "Notfalls"-parameter angegeben, falls die Prefs nicht gefunden werden können.
Was für ne 1337-Maschine hast du überhaupt, dass du das zum Laufen bringst? Asus Rampage 2 Extreme mit 4 Intel i7 und 2 nVidia GeForce Geforce 9800 GT oder was? :mrgreen:
Ich probier's morgen weiter, aber wo zum Teufel lade ich da etwas zweimal?

Verfasst: 28.02.2009 00:10
von Kaeru Gaman
> aber bei ReadPreferenceString() wird ja auch ein "Notfalls"-parameter angegeben, falls die Prefs nicht gefunden werden können.

aber trotzdem brichst du mit nem msgreq ab, wenn die prefs nicht da ist, du Künstler! :mrgreen:


> wo zum Teufel lade ich da etwas zweimal?
sprite #1 und #3 lädst du aus dem selben file.


hier ist mein testcode:
- ersatz-routine fürs sprite-laden eingebunden
- prefs-loader auskommentiert
- clearscreen ergänzt

-> funzt

Code: Alles auswählen

;-Initialisierung:
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
  MessageBox_(#Null,"Eine oder mehrere Libraries für das Programm"+Chr(13)+"Aimer v1.00 konnten nicht initialisiert werden!"+Chr(13)+"Neuinstallation des Programmes könnte das Problem beheben.","Fehler beim Initialisieren",#MB_OK | #MB_ICONSTOP)
  End
EndIf

;KONSTANTEN
#NoAction = 0
#Released = 1
#Clicked  = 2
#Dragged  = 3

Define MLB.l    ; Mouse Left Button
Define MRB.l    ; Mouse Right Button

;VARIABLEN
Global rand_backgrnd.b
Global released
Global MouseX, MouseY
Global ZielX, ZielY
Global speed
Global Console, Cheat ;Die kommen dann nachher zum Einsatz
Global WType.s
Global ChosenGun

WType.s = ""
Cheat = #False
ShotsLeft = Magazine
speed = 1

;-STRUKTUREN
Structure Weapons
  Name.s
  Magazine.b
  ShootSound.s
  DrySound.s
  MuniSprite.s
  TickShot.b
  TickDry.b
  TickReload.b
EndStructure



Select ProgramParameter()
  Case "/SETTINGS"
    If RunProgram("startmgr.exe")
      End
    Else
      MessageBox_(#Null,"startmgr.exe kann nicht gefunden werden!"+Chr(10)+"Neuinstallation könnte den Fehler beheben","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
      End
    EndIf
  Case "/CONSOLE"
    Console = #True ;ebenfalls für nachher
EndSelect

width = 1024 : height = 768 : depth = 32
   
;-Vorbereitung:
; If OpenPreferences("settings.prefs")
;   width = Val(ReadPreferenceString("ScreenWidth","1024"))
;   height = Val(ReadPreferenceString("ScreenHeight","768"))
;   depth = Val(ReadPreferenceString("Depth","32"))
; Else
;   MessageBox_(#Null,"settings.prefs kann nicht gefunden werden!"+Chr(10)+"Neuinstallation könnte den Fehler beheben","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
;   End
; EndIf
If OpenScreen(width,height,depth,"Aimer v1.00") = 0
  MessageBox_(#Null,"Es konnte kein "+Str(width)+"x"+Str(height)+"x"+Str(depth)+" Bildschirm erstellt werden!","Fehler",#MB_OK | #MB_ICONERROR | #MB_DEFBUTTON1)
  End
EndIf

rand_backgrnd = Random(3)
rand_backgrnd = rand_backgrnd + 1

fontID = LoadFont(100,"Arial",12,#PB_Font_Bold)

Procedure ALoadSprite( Nr.l, Name.s )
  CreateSprite( Nr, 192,192 )
  StartDrawing(SpriteOutput(Nr))
    Box( 0,0, 192,192, $FF00FF)
    For n=0 To 15
      Line( n,     0, 192, 192, $FFFF00 )
      Line( 0,     n, 192, 192, $FFFF00 )
      Line( n, 191-0, 192,-192, $FFFF00 )
      Line( 0, 191-n, 192,-192, $FFFF00 )
    Next
    DrawText(0,0,Name)
  StopDrawing()
EndProcedure

Global Dim Guns.Weapons(2)

;PUMPGUN SETTINGS
Guns(0)\Name = "Pump"
Guns(0)\Magazine = 8
Guns(0)\TickShot = 10
Guns(0)\TickDry = 2
Guns(0)\TickReload = 17

;AK74 SETTINGS
Guns(1)\Name = "AK74"
Guns(1)\Magazine = 30
Guns(1)\TickShot = 2
Guns(1)\TickDry = 3
Guns(1)\TickReload = 23

;GLOCK 19 SETTINGS
Guns(2)\Name = "Glock"
Guns(2)\Magazine = 30
Guns(2)\TickShot = 7
Guns(2)\TickDry = 3
Guns(2)\TickReload = 10

ALoadSprite(1,"data\gfx\ak74thm.bmp");
  TransparentSpriteColor(1,RGB(255,0,255));
ALoadSprite(2,"data\gfx\glock19thm.bmp");
  TransparentSpriteColor(2,RGB(255,0,255));
ALoadSprite(3,"data\gfx\ak74thm.bmp");
  TransparentSpriteColor(3,RGB(255,0,255));
ALoadSprite(012,"data\gfx\mouse.bmp")
  TransparentSpriteColor(012,RGB(255,0,255));
cont = 0
;Problemschleife:
Repeat
 
  ExamineKeyboard()
  ExamineMouse()
 
  MouseX = MouseX() : MouseY = MouseY()
ClearScreen(0) 
  DisplayTransparentSprite(1,0,0);
  DisplayTransparentSprite(2,500,200);
  DisplayTransparentSprite(3,800,400);
  DisplayTransparentSprite(012,MouseX,MouseY);
 
  If MouseButton(#PB_MouseButton_Left)
    WType.s = "ak74"
    ChosenGun = 0
    cont = 1
  EndIf
 
  If MouseButton(#PB_MouseButton_Right)
    WType.s = "glock"
    ChosenGun = 2
    cont = 1
  EndIf
 
  If MouseButton(#PB_MouseButton_Middle)
    WType.s = "pump"
    ChosenGun = 1
    cont = 1
  EndIf
  ;Hat irgendwas mit SpritePixelCollision() nicht gefunzt, deshalb vorübergehend auf Linksklick, Rechts- und Mittelklick geändert.
  StartDrawing(ScreenOutput())
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(fontID)
      DrawText(5,20,Str(coll),RGB(255,255,255))   
    DrawText(5,5,"ESC - Beenden" )
  StopDrawing()
 
  FlipBuffers()
 
  If KeyboardPushed(#PB_Key_Escape)
    End
  EndIf
Until cont <> 0