player ruckelfrei über Kacheln bewegen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

burri

Betreff: player ruckelfrei über Kacheln bewegen

BeitragMo, Jun 15, 2009 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich habe einen Player, der soll bei Tastendruck über Kacheln laufen.
Von Kachel zu Kachel soll er 5 Schritte zu 10 Pixel laufen.
Das funktioniert, aber er ruckelt bei permanenten Tastendruck.
Kann man das besser Programmieren?

Danke, burri

Code:
If KeyDown(205)
keyr=1
ship=LoadImage("player1.bmp") ;rotate player right
MaskImage ship, 0, 0, 255
MidHandle ship
RotateImage ship ,90
EndIf
If keyr=1 And keyrz<5
keyrz=keyrz+1
player_x = player_x + 10 ;move player right 5 steps
Else
keyrz=0
keyr=0
EndIf

Nicdel

BeitragMo, Jun 15, 2009 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal ist es wichtig, dass das Bild des Players nicht in der Schleife geladen wird...
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

ozzi789

BeitragMo, Jun 15, 2009 14:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Vermeide Rotateimage in einer Schleife => da extrem langsam
Nimm draw3d oder rendere die Bilder vor du das Game lädst und speichere die Instanzen in einem Dim

Schau dir mal http://home.arcor.de/inpac/tut1.htm an



mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

ComNik

BeitragMo, Jun 15, 2009 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
und darf ich auf die code tags hinweisen? das macht den code den du postest wesentlich einfacher zu lesen Wink

Rotate Image kannst du wie ozzi schon sagt nicht in der Hauotschleife verwenden. Außer du benutzt das himmlische BlitzMax*schwärm* ... oder die Draw3D

äh wo war ich? achso ja genau BlitzMax Programme werden von dem GPU unterstützt, deswegen kannst du skalieren und rotieren in echtzeit!

In BB machst du ein Dim in dem du das bild speicherst (36 mal reicht für jede mögliche richtung) und dann drehst du es immer ein stückchen weiter.

mfg
WIP: Vorx.Engine
 

burri

BeitragMo, Jun 15, 2009 19:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

erst mal vielen Dank für eure Hinweise.

Das der Player ruckelt liegt nicht am Drehen, auch nicht am Laden des Bildes in der Schleife, sondern an meiner Schleifenbildung.

Wenn ich den Player bei Tastendruck nicht nach 5 Durchgängen stoppen lasse, dann läuft er flüssig, trotz dem unnötigen Ballast.

Leider bleibt er dann nicht mehr genau auf der Kachel stehen.

Die Kacheln haben eine Schrittweite von 50 Pixeln, der Player hat eine Schrittweite von 10 Pixel. Wenn der Player bei einmaligen Tastendruck fünf mal die Schleife durchläuft, bleibt er genau über der nächstgelegen Kachel stehen

Wenn ihr mir ein Beispiel coden könnt, bei dem der Player bei einmaligen Tastendruck genau auf der Kachel zum stehen kommt, und bei dauernden Tastendruck nicht in seiner Bewegung ruckelt, wäre mir damit sehr geholfen.

Vielen Dank,

burri

ozzi789

BeitragMo, Jun 15, 2009 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Such mal nach tile to tile scrolling / pixel to tile scrolling

mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jun 15, 2009 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
burri, egal ob dein Code bei dir gerade nicht wegen den ständigem laden ruckelt, es ändert nichts daran, dass dieser so in der Form total falsch ist. Zum einen wird irgendwann das System das Programm zum Absturz bringen und dazu den Speicher voll hauen. Und zum zweiten belastest du das System bereits mit den einfachsten Berechnungen aus.

Zu deinen Fragen:

Code: [AUSKLAPPEN]
Graphics 512,512,0,2
SetBuffer BackBuffer()

Const RASTER=32

Local Timer=CreateTimer(60)
Local XPos=RASTER*10
Local YPos=RASTER*10
Local XDir,YDir
Local Anim=0




While Not KeyHit(1)
   
   If Anim=0 Then
      If KeyHit(203) Or KeyDown(203) Then Anim=1:XDir=-1:YDir=0
      If KeyHit(205) Or KeyDown(205) Then Anim=1:XDir=+1:YDir=0
      If KeyHit(200) Or KeyDown(200) Then Anim=1:XDir=0:YDir=-1
      If KeyHit(208) Or KeyDown(208) Then Anim=1:XDir=0:YDir=+1
   End If
   
   If Anim=1 Then
      XPos=XPos+XDir
      YPos=YPos+YDir
      If (XPos Mod RASTER)=0 And (YPos Mod RASTER)=0 Then Anim=0
   End If
   
   Rect XPos,YPos,RASTER,RASTER,1
   Text 20,20,XPos+" "+YPos
   
   WaitTimer Timer
   Flip 0
   Cls
Wend
End


Ist ein Beispiel. Erst durcharbeiten ''verstehen'' bevor man es einsetzen sollte. Wink
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

burri

BeitragMo, Jun 15, 2009 21:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo hectic,

deine Animation ruckelt deutlich weniger als meine.
Die Hinweise bezüglich der richtigen Programmierung habe ich verstanden und werde sie künftig auch anweden.

Das Code-Beispiel von dir habe ich ebenfalls verstanden, ich habe nur noch etwas Probleme mit der Schleifenabarbeitung von Basic, da ich vorher nur in Flash gecodet habe.

Danke für deine Hilfe.

viele Grüße,

burri

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMo, Jun 15, 2009 22:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit ''Flash'' meinst du ''Action Script''? Ist es nicht so eine Mischung aus Ereignis und Objekt orientierter Sprache? Naja, es ist alles Gewöhnungssache. Mir persönlich war Action Script zu sehr - klicke hier, klicke da und schon hast du 100 weitere Möglichkeiten sich weiter durch zu klicken, um dann am Ende eine Zeile Code noch zu setzen. Blitz3D dagegen ist rein prozedual und in dieser Hinsicht ''veraltet''. Es heisst aber nicht, dass man damit nichts zustande bekommt. Gerade für einfache Sachen kommt man so meistens schneller ans Ziel. Aber denoch, muß ich mein bisherigen Standpunkt mal ablegen. Wenn du gerade mit programmieren mit Blitz anfängst, wäre es eventuell besser für dich, wenn du dich auf BlitzMax einarbeitest. Das würde meiner Ansicht nach auch wegen deinen bisherigen Erfahrungen mit Flash, dich schneller ans Ziel gelangen lassen. Zumindest die Demo-Version von BlitzMax würde ich dir da ans Herz legen.

Achja, mein Code habe ich vorhin zu Testzwecken erstellt. Ich hab keine Referenzen zu andere Möglichkeiten gezogen. Es empfielt sich vielleicht denoch das eine oder andere Tutorial durch zu arbeiten. Ohne das ich das mal selbst gemacht habe, aber einige haben erst durch zählige Tutorials schnell was lernen können.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

burri

BeitragDi, Jun 16, 2009 8:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo hectic,

ja, ich meine ActionScript. Bei Flash hast du eine Art Zeichenprogramm und Animationsprogramm. Die Objekte oder Bilder kannst du dann mit mit einem Ereignis versehen und Programme ausführen, du kannst aber auch alles dynamisch (programmtechnisch) erzeugen.
Director habe ich auch mal ausprobiert, ist aber in der Animation viel langsamer als Blitzbasic.

Ich möchte ein 2D-Spiel "Blackshift" von Rob Allen nachprogrammieren, bloss in ActionScript kannst du nicht beliebig lokal speichern.
Das brauche ich für den Leveleditor.

Von BlitzBasic bin ich begeistert, es ist schneller als das Orginalspiel.

Bei dem Spiel wird der Player verzögert immer in die Bildmitte gezogen, der ganze Hintergrund wird also mitbewegt.

BlitzMax werde ich mir auf jedenfall besorgen.

viele Grüße,

burri

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group