Screengadget

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Maikel

Screengadget

Beitrag von Maikel »

Hi Leute,

Ich bin gerade dabei ein 2D Spiel zu schreiben, und hab ein ein problem.
Ich weiß nicht wie Imagegadget´s in das Spiel bekomme.

Könnt ihr mir vielleicht helfen ?

Danke für eure Antworte im vorraus !! :wink:
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Also wenn das Spiel im vollbild läuft hast, also mit OpenScreen wird das IMHO nicht gehen. Wenn es aber ein WindowedScreern ist ist es kein Problem. Die Frage ist eher: Warum brauchst du ein Imagegadget?
Maikel

Beitrag von Maikel »

Ich brauche die gadget´s wegen dem menü z.b. spiel starten oder highscore.

aber wenn es dafür eine andere möglichkeit gibt, dann sag mir die bitte
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Die Maus abfragen, und dann ein Sprite unter dem Mauszeiger auf
Collision mit ButtonSprite überprüfen, wenn der Benutzer klickt.
Maikel

Beitrag von Maikel »

so mach ich das momentan auch, aber das gibt irgendwie probleme

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf
If OpenScreen(1024,768, 32, "Gnadenlos")
  LoadSprite(0, "menü.bmp", 0)
  LoadSprite(1, "fadenkreuz(menü).bmp", 0)
  LoadSound(2,"laden.wav")
  MouseLocate(500,380)
  TransparentSpriteColor(1,255,0,255)
  spielx = 470
  spiely = 240
  highx = 470
  highy = 425
  exitx = 470
  exity = 620
  Repeat
    FlipBuffers(1)
    ExamineMouse()
    DisplaySprite(0,0,0)
    ExamineKeyboard()
    xm = MouseX()
    ym = MouseY()
    DisplayTransparentSprite(1, xm, ym)
    If MouseButton(1) And SpriteCollision(0,spielx,spiely,1,xm,ym)
      PlaySound(2,0)
      ClearScreen(0,0,0)
      DisplayTransparentSprite(1, xm, ym)
      RunProgram("spiel.exe","","")
      CloseScreen()
      EndIf
    If MouseButton(1) And SpriteCollision(0,highx,highy,1,xm,ym)
      ClearScreen(0,0,0)
      DisplayTransparentSprite(1, xm, ym)
      RunProgram("highscore.exe","","")
      CloseScreen()
    EndIf
    If MouseButton(1) And SpriteCollision(0,exitx,exity,1,xm,ym)
      ClearScreen(0,0,0)
      DisplayTransparentSprite(1, xm, ym)
      End
    EndIf 
  Until KeyboardPushed(#PB_Key_Escape)
  End 
EndIf
End  
aber der öffnet bei jede button das spiel, und nicht die highscor oder exit
deswegen dachte ich mir, das dass mit den imagegadgets besser functioniert
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Vertausch mal die Reihenfolge der If Mouse and Collision
und berichte, was Passiert.
Maikel

Beitrag von Maikel »

hab ich versucht aber sorry es geht trozdem nicht
Benutzeravatar
Macros
Beiträge: 1365
Registriert: 23.12.2005 15:00
Wohnort: Olching(bei FFB)
Kontaktdaten:

Beitrag von Macros »

Code: Alles auswählen

If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSound() = 0
  MessageRequester("Error", "Can't open DirectX 7 or later", 0)
  End
EndIf
If OpenScreen(1024,768, 32, "Gnadenlos")
  LoadSprite(0, "C:\gr.bmp", 0)
  LoadSprite(1, "C:\gr.bmp", 0)
  ;LoadSound(2,"laden.wav")
  MouseLocate(500,380)
  TransparentSpriteColor(1,255,0,255)
  spielx = 470
  spiely = 240
  highx = 470
  highy = 425
  exitx = 470
  exity = 620
  Repeat
    FlipBuffers(1)
    ExamineMouse()
    DisplaySprite(0,0,0)
    ExamineKeyboard()
    xm = MouseX()
    ym = MouseY()
    DisplayTransparentSprite(1, xm, ym)
    DisplayTransparentSprite(0, spielx, spiely)
    DisplayTransparentSprite(0, highx, highy)
    DisplayTransparentSprite(0, exitx, exity)
    If MouseButton(1) And SpriteCollision(0,spielx,spiely,1,xm,ym)
      ;PlaySound(2,0)
      ClearScreen(0,0,0)
      DisplayTransparentSprite(1, xm, ym)
      Debug "b";RunProgram("spiel.exe","","")
      CloseScreen()
      End
      EndIf
    If MouseButton(1) And SpriteCollision(0,highx,highy,1,xm,ym)
      ClearScreen(0,0,0)
      DisplayTransparentSprite(1, xm, ym)
      Debug "a";RunProgram("highscore.exe","","")
      CloseScreen()
      End
    EndIf
    If MouseButton(1) And SpriteCollision(0,exitx,exity,1,xm,ym)
      ClearScreen(0,0,0)
      DisplayTransparentSprite(1, xm, ym)
      Debug "c"
      End
    EndIf
  Until KeyboardPushed(#PB_Key_Escape)
  End
EndIf
End 
Läuft problemlos bei mir :?
Maikel

Beitrag von Maikel »

wenn ich stat runprogram() z.b. den befehl disyplaytransperentsprit(255,0,0) benutze, dann wird das bild auch auf nicht transperent geändert.

also denke ich, das dass irgendwie mit runprogram() zusammen hängt
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag von PMV »

Ich frag mich grade, was du vor hast :D

Ein Menü welches durch anklicken weitere Programme startet? Eher
unpraktisch für Spiele. Benutzte doch Prozeduren.

Vielleicht versteh ich aber auch überhaupt nicht was du vor hast oder du
hast was ganz anders gemacht als du wolltest :lol: .

Wie auch immer, einem Sprite wird mit dem Befehl
TransparentSpriteColor() eine transparente Farbe zugewiesen. Das
bedeutet alle Pixel des Sprites, welche die angegebene Farbe haben
werden bei dem Befehl DisplayTransparentSprite() nicht dargestellt. (gillt
natürlich auch für die Pixelcollision)

Ansonnsten ist mir schleierhaft, was du vor hast oder wo dein problem
liegt :|

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Antworten