Ja- das wirkt schon etwas weicher- und man kommt auch bei den schnellen Bällen noch rechtzeitig an - Paddelspeed sollte aber doch mit wenigstens 4 anfangen (so mein Gefühl)
Ich wiederum hab inzwischen ein Problem ausgemacht was beim Starten eines Bildschirmschoners auftritt (wenn man z.B. per Joystick spielt und nicht zufällig den MediaPlayer am Laufen hat) - das FlipBuffers() muss weiter hoch und vor dem IsScreenActive() ausgeführt werden
ich habs im Anfänger-Foren-Bereich\Bildschirmschoner-Thread mal beschrieben - ich denke das kriegst Du hin
Mein erstes PB-Spielchen: BallaBalla
-
- Beiträge: 134
- Registriert: 18.10.2005 10:22
- Wohnort: Welschbillig
-
- Beiträge: 134
- Registriert: 18.10.2005 10:22
- Wohnort: Welschbillig
hmm...ReneMiner hat geschrieben:Ich wiederum hab inzwischen ein Problem ausgemacht was beim Starten eines Bildschirmschoners auftritt (wenn man z.B. per Joystick spielt und nicht zufällig den MediaPlayer am Laufen hat) - das FlipBuffers() muss weiter hoch und vor dem IsScreenActive() ausgeführt werden
Eigentlich sollte es doch reichen FlipBuffers() hinter das EndIF von "If IsScreenActive()" zu schreiben.
Code: Alles auswählen
If IsScreenActive()
...
..
.
.
..
...
; FlipBuffers() <-- alte Stelle
EndIf ; IsScreenActive()
FlipBuffers() ; <-- neue Stelle
Gruß Christian
Ich habs eben drüben auf dem anderen Rechner aus dem Kopf nochmal eingefügt (das oben von Dir Beschriebene mit dem PaddelSpeed)
Dabei kam ich irgendwie plötzlich nicht mehr ganz an den Rand...
Zusätzlich hab ich also noch eine Variable gebraucht (ich rechne halt kein Ergebnis gerne 2mal oder öfter aus sondern merk mir's lieber), und zwar PaddelMove- eben die tatsächliche Bewegung,
Paddelspeed hab ich doch wieder bis auf 1 runter zugelassen- und das Maximum auf 15 reduziert und den PaddelSpeed sofort an anderen Stellen im Code verwendet.
im Eingabe verarbeiten siehts nun bei mir so aus:
und die Prozedur "Umkehren" ist nun auch etwas geändert- da lassen die Bälle sich so richtig schön anschneiden und auch gezielt aus den Ecken bzw. vom Rand weglenken indem man eben kürzer oder länger gegen die Seitenwand drückt
Das mit dem Bildschirmschoner test ich doch gleich mal...
EDIT:
getestet: ja- auch so gehts, das Bild bleibt erhalten wenn man die Buffers so flippt, egal ob Screen vorher active war oder nicht - konfus - wär mir so nicht in den Sinn gekommen
Kauf den Kindern lieber ein Gamepad als einen Joystick. Würd ich sagen. Wenn Du's auch benutzen willst sollte es schon eines mit 2 Joysticks, einem Steuerkreuz und 12, davon 10 sichtbaren Buttons sein (2 Buttons sind die Jysticks die kann man runter dücken) - also der ganz normale Playstation-Standard - gibts von unzähligen Herstellern.
PS. Lassen sich gepostete Codes in diesem Forum irgendwie ein/ausklappbar machen?
Dabei kam ich irgendwie plötzlich nicht mehr ganz an den Rand...
Zusätzlich hab ich also noch eine Variable gebraucht (ich rechne halt kein Ergebnis gerne 2mal oder öfter aus sondern merk mir's lieber), und zwar PaddelMove- eben die tatsächliche Bewegung,
Paddelspeed hab ich doch wieder bis auf 1 runter zugelassen- und das Maximum auf 15 reduziert und den PaddelSpeed sofort an anderen Stellen im Code verwendet.
im Eingabe verarbeiten siehts nun bei mir so aus:
Code: Alles auswählen
Case #Befehl_Abfeuern
If GameLevel = 0
If hatJoystick
SetGadgetText(Statusanzeige, "F1 or JoyButton 1 to Start a new Game")
Else
SetGadgetText(Statusanzeige, "F1 to Start a new Game")
EndIf
Else
ResetList(Ball())
While NextElement(Ball())
If Ball()\Geschw = 0
Ball()\Einschlag = #bumms_Paddel
Ball()\Korrigieren = 0
Ball()\Geschw = 5 + Random(GameLevel)/10
If vorherigerBefehl= #Befehl_GehLinks
Ball()\Richtung= 269 - 2 * PaddelSpeed
ElseIf vorherigerBefehl = #Befehl_GehRechts
Ball()\Richtung= 271 + 2 * PaddelSpeed
Else
Repeat
Ball()\Richtung = 255 + Random(30)
Until Ball()\Richtung <> 270
EndIf
EndIf
Wend
SetGadgetText(Statusanzeige, "Level " + Str(GameLevel))
ZusatzCount = 0
EndIf
Case #Befehl_GehLinks
If vorherigerBefehl = #Befehl_GehLinks
If PaddelSpeed < 15
PaddelSpeed = PaddelSpeed + 1
EndIf
Else
PaddelSpeed = 1
EndIf
If PaddelLinks >= PaddelSpeed
PaddelMove = PaddelSpeed
Else
PaddelMove = PaddelLinks
EndIf
PaddelLinks = PaddelLinks - PaddelMove
ResetList(Ball())
While NextElement(Ball())
If Ball()\Geschw = 0
Ball()\Pos\X = Ball()\Pos\X - PaddelMove
EndIf
Wend
Case #Befehl_GehRechts
If vorherigerBefehl = #Befehl_GehRechts
If PaddelSpeed < 15
PaddelSpeed = PaddelSpeed + 1
EndIf
Else
PaddelSpeed = 1
EndIf
If PaddelLinks + PaddelBreit + PaddelSpeed < 512
PaddelMove = PaddelSpeed
Else
PaddelMove= 512 - (PaddelLinks + Paddelbreit)
EndIf
PaddelLinks = PaddelLinks + PaddelMove
ResetList(Ball())
While NextElement(Ball())
If Ball()\Geschw = 0
Ball()\Pos\X = Ball()\Pos\X + PaddelMove
EndIf
Wend
EndSelect
Code: Alles auswählen
Case #bumms_Paddel
neueRichtung= -1 * (Richtung - 90) + 270
; etwas abfälschen...
If letzterBefehl=#Befehl_GehLinks
neueRichtung = neueRichtung - PaddelSpeed
ElseIf letzterBefehl = #Befehl_GehRechts
neueRichtung = neueRichtung + PaddelSpeed
EndIf
; und in senkrechte Richtung zwingen
If neueRichtung >= 315
neueRichtung = neueRichtung - 3
ElseIf neueRichtung <= 225
neueRichtung = neueRichtung + 3
EndIf
EndSelect
EDIT:
getestet: ja- auch so gehts, das Bild bleibt erhalten wenn man die Buffers so flippt, egal ob Screen vorher active war oder nicht - konfus - wär mir so nicht in den Sinn gekommen
Kauf den Kindern lieber ein Gamepad als einen Joystick. Würd ich sagen. Wenn Du's auch benutzen willst sollte es schon eines mit 2 Joysticks, einem Steuerkreuz und 12, davon 10 sichtbaren Buttons sein (2 Buttons sind die Jysticks die kann man runter dücken) - also der ganz normale Playstation-Standard - gibts von unzähligen Herstellern.
PS. Lassen sich gepostete Codes in diesem Forum irgendwie ein/ausklappbar machen?
-
- Beiträge: 134
- Registriert: 18.10.2005 10:22
- Wohnort: Welschbillig
Nach einer endlosen halben Stunde am Gamepad/Joystick-Regal haben wir uns für das "Hama Double Action Air Grip Gamepad" entschieden.ReneMiner hat geschrieben:Kauf den Kindern lieber ein Gamepad als einen Joystick. Würd ich sagen. Wenn Du's auch benutzen willst sollte es schon eines mit 2 Joysticks, einem Steuerkreuz und 12, davon 10 sichtbaren Buttons sein (2 Buttons sind die Jysticks die kann man runter dücken) - also der ganz normale Playstation-Standard - gibts von unzähligen Herstellern.
Das Problem mit dem Rand glaubte ich behoben zu haben.
Verwende jetzt aber dennoch deinen Code, da du mit PaddelMove natürlich recht hast.
Für alle Mitleser die keine lust haben alle Änderungen selber einzupflegen gibt es unter http://toter-link.de/PureBasic/BallaBal ... elease.zip eine Funktionsfähige Arbeitsversion. Die werde ich in Unregelmäßigen Abständen aktualisieren. Neue Level gibt es aber erst wenn ich meine Version der Procedure NeuesLevel() fertig habe.
Gruß Christian
Willst Du evtl auch neue Steine und noch andere herabfallende Sachen einfügen - z.B. Schneeflocken die die Bälle ein paar Mal am Paddel anfrieren lassen (Ball()\Geschw auf 0 setzen) so das man sie neu abfeuern kann oder andere Bonus-Sachen?
Um beispielsweise das Paddel nach einem aufgefangenen Bonus-Gegenstand breiter oder schmaler zu machen müsste man wahrscheinlich einfach noch ein schmaleres und ein breiteres Bildchen vom Paddel anfertigen weil sich scheinbar die Sprite-Grösse nicht einfach per Befehl festlegen lässt sondern immer an die Grösse der Textur gebunden ist.
JPG's scheinen übrigens mit DisplayTransparentSprite nicht zu funktionieren - irgendwie fehlt die Transparenz...
Und wenn Du neue Steine einsetzen willst brauchst Du nur im NeuesLevel das "< 10" gegen "<> 10" austauschen und anfangs die Indizes für Ball- Tropf- und Paddel-Sprites etwas höher setzen.
___________________________________________________________
EDIT: Etwas Nachschlag
Da ich mich manchmal drüber geärgert hab das da Bälle durch den Schläger flogen (ja ich weiss ja das sie die magische Linie überschritten haben müssen) - aber ich meinte eben - "...den hätt ich eigentlich grade noch kriegen müssen..." hab ich noch was reingefummelt:
bei BewegeBälle,
etwa ab Line 463
Es fliegen zwar trotzdem manche noch "durch" - aber die waren bereits in der unteren Hälfte des Schlägers
Um beispielsweise das Paddel nach einem aufgefangenen Bonus-Gegenstand breiter oder schmaler zu machen müsste man wahrscheinlich einfach noch ein schmaleres und ein breiteres Bildchen vom Paddel anfertigen weil sich scheinbar die Sprite-Grösse nicht einfach per Befehl festlegen lässt sondern immer an die Grösse der Textur gebunden ist.
JPG's scheinen übrigens mit DisplayTransparentSprite nicht zu funktionieren - irgendwie fehlt die Transparenz...
Und wenn Du neue Steine einsetzen willst brauchst Du nur im NeuesLevel das "< 10" gegen "<> 10" austauschen und anfangs die Indizes für Ball- Tropf- und Paddel-Sprites etwas höher setzen.
___________________________________________________________
EDIT: Etwas Nachschlag
Da ich mich manchmal drüber geärgert hab das da Bälle durch den Schläger flogen (ja ich weiss ja das sie die magische Linie überschritten haben müssen) - aber ich meinte eben - "...den hätt ich eigentlich grade noch kriegen müssen..." hab ich noch was reingefummelt:
bei BewegeBälle,
etwa ab Line 463
Code: Alles auswählen
...
Ball()\Pos\X = neuX
Ball()\Pos\Y = neuY
EndIf
; _________________________________________
; ab hier eingefügt:
ElseIf NeuY > PaddelOben - SpriteHeight(#BIndex) And neuY <= PaddelOben + SpriteHeight(#PIndex)/2 And Ball()\Einschlag <> #bumms_Paddel
If neuX >= PaddelLinks - SpriteWidth(#Bindex)/2 And neuX + SpriteWidth(#BIndex)/2 <= PaddelLinks + PaddelBreit
Ball()\Richtung = Umkehren(Ball()\Richtung, #bumms_Ecke)
PlaySound(6)
Ball()\Einschlag = #bumms_Paddel
Ball()\Korrigieren = 0
Else
Ball()\Pos\X = neuX
Ball()\Pos\Y = neuY
EndIf
; bis hier eingefügt
;_________________________________________________
Else
Treffer.l = SteineTesten()
...
Es fliegen zwar trotzdem manche noch "durch" - aber die waren bereits in der unteren Hälfte des Schlägers