Schießen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Schießen

Beitrag von Kaisky007 »

Hi alle!
Ich bin noch total anfänger, ich will einen Weltraumshooter machen, weiß aber nicht wirklich wie man machen kann, dass der schießt... Ich glaube das hat etwas mit AddElement zutun, habe das auch ausprobiert, jedoch wenn ich einmal abschieße, und dann nochmal abschieße, verschwindet der alte Schuss. :|

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"Vollbild")
LoadSprite(0,"F:\Kai´s Spiel\Pics\Weltraum.bmp",0)
LoadSprite(1,"F:\Kai´s Spiel\Pics\Shuttle.bmp",0)
LoadSprite(2,"F:\Kai´s Spiel\Pics\Schuss.bmp",0)
HBX = 0
HBY = 0
ShuttleX = 350
ShuttleY = 350
Repeat
FlipBuffers()
Pause + 1
SchussY - 10
NewList Schuss.w()
If ShuttleX > 700
ShuttleX = 700
EndIf
If ShuttleX < 0
ShuttleX = 0
EndIf
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
ShuttleX - 5
EndIf
If KeyboardPushed(#PB_Key_Right)
ShuttleX + 5
EndIf
If KeyboardPushed(#PB_Key_Space) And Pause > 10
Pause = 0
AddElement(Schuss())
SchussX = ShuttleX + 49
SchussY = ShuttleY - 5
EndIf
DisplayTransparentSprite(0,HBX,HBY)
DisplayTransparentSprite(1,ShuttleX,ShuttleY)
DisplayTransparentSprite(2,SchussX,SchussY)
Until KeyboardPushed(1)
Kann mir wer helfen??
Ich habe es schonmal geschafft, aber ich hatte da 10 verschiedene Schüsse pragrammiert, und ich finde das ist etwas zu umständlich.....
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Willkommen im Board.

schau dir im Examples-Ordner mal das WaponezII-Beispiel an, dort sind Schüsse mit drin.

grundsätzlich:
damit dir deine Liste was bringt, musst du auch ne schleife einbaun, die deine Liste durchgeht,
und deine schusskoordinaten auch als teil des listenelements speichern.

im moment hast du zwar ne liste, aber die besteht nicht aus strukturierten elementen,
sondern nur aus elementen des Typs W, und deine Schusskoordinaten sind einzelne Variablen.
wie du selber siehst, bringt dir die Liste so garnichts.

und gewöhn dir am besten gleich an, deinen Code anständig einzurücken,
damit man eine Gliederung erkennen kann.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Beitrag von Kaisky007 »

Wie mache ich das mit den Code????
Und wo ist ein ExampleOrdner?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Wie mache ich das mit den Code?

mit Code einrücken meine ich das:

Code: Alles auswählen

For n=0 To 9
  For t=0 To 9
    Debug Str(n) + "/" + Str(t)
    If t = 5 
      Debug "t=5"
      If n = 5
        Debug "und n=5"
      EndIf
    EndIf
  Next
Next
das macht das ganze übersichtlicher.


> Und wo ist ein ExampleOrdner?

in dem Ordner, wo du PureBasic installiert hast.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Beitrag von Kaisky007 »

Achso, mit den example dachte ich in diesem forum hier.
Und den Code dachte ich.......... egal kein boch es zu erzählen, habs zumindenst missverstanden.
Aber ich fine das so wie ichs mache besser, ich habe da nen besseren überblick, jedem das seine ;)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Kaisky007 hat geschrieben:Aber ich fine das so wie ichs mache besser, ich habe da nen besseren überblick, jedem das seine ;)
das ist nur so lange "übersichtlich", so lange dein code nicht länger als 50 zeilen ist.
außerdem wirst du feststellen, dass sich manche kollegen (mich eingeschlossen)
sich später einfach weigern werden, längere codes durchzusehen, die nicht anständig eingerückt sind.

so sieht dein code eingerückt aus:

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenScreen(800,600,32,"Vollbild")

LoadSprite(0,"F:\Kai´s Spiel\Pics\Weltraum.bmp",0)
LoadSprite(1,"F:\Kai´s Spiel\Pics\Shuttle.bmp",0)
LoadSprite(2,"F:\Kai´s Spiel\Pics\Schuss.bmp",0)

HBX = 0
HBY = 0
ShuttleX = 350
ShuttleY = 350

Repeat
  FlipBuffers()

  Pause + 1
  SchussY - 10

  NewList Schuss.w()

  If ShuttleX > 700
    ShuttleX = 700
  EndIf

  If ShuttleX < 0
    ShuttleX = 0
  EndIf

  ExamineKeyboard()

  If KeyboardPushed(#PB_Key_Left)
    ShuttleX - 5
  EndIf

  If KeyboardPushed(#PB_Key_Right)
    ShuttleX + 5
  EndIf

  If KeyboardPushed(#PB_Key_Space) And Pause > 10
    Pause = 0
    AddElement(Schuss())
    SchussX = ShuttleX + 49
    SchussY = ShuttleY - 5
  EndIf

  DisplayTransparentSprite(0,HBX,HBY)
  DisplayTransparentSprite(1,ShuttleX,ShuttleY)
  DisplayTransparentSprite(2,SchussX,SchussY)
Until KeyboardPushed(1)
...und jetzt erst, wo ich es formatiert gesehen hab, fällt mir auf, dass
1. das NewList() vor die Schleife gehört, und
2. du das ClearScreen vergessen hast.

PS:
btw, du solltest dir abgewöhnen, Sonderzeichen in deinen Pfaden zu verwenden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Kaisky007 hat geschrieben:Aber ich fine das so wie ichs mache besser, ich habe da nen besseren überblick
wenn Du aber uns Deinen Code präsentierst, solltest Du darauf achten, dass
wir das besser lesen können. Sonst könnte es passieren, dass die Leute hier
nach kurzer Zeit das Interesse verlieren, Deinen seltsam formatierten Code
zu entziffern ;-)

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Kaisky007
Beiträge: 83
Registriert: 25.05.2008 20:58

Beitrag von Kaisky007 »

okeay, das verstehe ich.....mt den code
Aber wenn ich clearscreen machen passiert auf dem Bidschirom Nix, nur schwarz
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

*kicher* es kommt ja auch drauf an, wann du den Bildschirm löscht...

eine grundsätzliche reihenfolge sollte einleuchten:
1. Bildschirm löschen
2. den aktuellen Frame zeichnen (Sprites darstellen etc.)
3. Buffer flippen, um das gerade gezeichnete anzuzeigen.
4. und wieder von vorne

es funktioniert natürlich auch, die buffer am anfang der schleife zu flippen,
manche verteidigen diesen programmierstil sogar vehement...
aber eines ist unvermeidlich:
der bildschirm muss zwischen dem flippen und dem neuzeichnen gelöscht werden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
gnasen
Beiträge: 578
Registriert: 01.08.2007 14:28
Computerausstattung: PB 4.60

Beitrag von gnasen »

Kaisky007 hat geschrieben:Aber wenn ich clearscreen machen passiert auf dem Bidschirom Nix, nur schwarz
Ich hoffe das war keine Frage, was anderes sollte bei ClearScreen() ja auch nicht zu erwarten sein :lol:

Falls du meinst es wird schwarz, obwohl du auf dem Screen zeichnest, dann bedenke immer die Position von ClearScreen(). Ich machs zB immer so:

Code: Alles auswählen

;Start des Render Vorganges: Bildschirminhalt löschen
ClearScreen(RGB(0,0,0))
;Alle Malvorgänge durchführen:
DisplayDies()
DisplayDas()
;Fertiges "Bild" auf dem Bildschirm ausgeben lassen:
FlipBuffers()
Antworten