Seite 7 von 8

Verfasst: 06.03.2008 23:18
von Kaeru Gaman
1. flirrt das bild fürchterlich, weil eben in jedem buffer jeder zweite kreis ist und
2. ist irgendwann das bild voll, wenn du nix löscht, das ist nicht der sinn einer "spur"

Verfasst: 07.03.2008 08:18
von PureMax
aber es hinterlässt eine und mir reichts ^^
vllt bin ich ja ne kleiner noob oder wie auch immer ihr das ausdrücken mögt aber ich machs auf meine art ^^

mfg MAX

Verfasst: 07.03.2008 18:32
von Milchshake
Ja, ich finde es gut, das du Probierst dein Problem selber zu lösen, aber bei einem größeren Projekt kommst du mit dieser "Technik" nicht weit.

Hier mal ein Code, wie ich es machen würde.

Code: Alles auswählen

InitSprite()
InitKeyboard()

OpenScreen(1024,768,32,"Spur-Test")


CreateSprite(0,10,10)             ;Erstellt einen Neuen Sprite  (Spur)   
 StartDrawing(SpriteOutput(0))    ;Zeichnet auf diesen Neuen Sprite
  Box(0,0,10,10,#Red)
StopDrawing()

CreateSprite(1,10,10)            ;Erstellt einen Neuen Sprite (Spieler)
 StartDrawing(SpriteOutput(1))   ;Zeichnet auf diesen Neuen Sprite
  Box(0,0,10,10,#Green)
StopDrawing()

Structure Spur                  ;Erstellt eine Structur für die spätere Liste
X.w
Y.w
EndStructure 

Global NewList Spur.Spur()      ; Erstellt eine Liste mit den Eigenschaften der Structur Spur.
                                  ; Die Liste heist aber auch Spur
   
Repeat
FlipBuffers()
ClearScreen(0)
ExamineKeyboard()


;Steuerung
If KeyboardPushed(#PB_Key_Left)
PlayerX - 2
EndIf 
If KeyboardPushed(#PB_Key_Right)
PlayerX + 2
EndIf 
If KeyboardPushed(#PB_Key_Up)
PlayerY - 2
EndIf 
If KeyboardPushed(#PB_Key_Down)
PlayerY + 2
EndIf 


If KeyboardPushed(#PB_Key_F12)
ClearList(Spur())                 ;Löscht die Liste
EndIf 


;Immer, wenn sich der Spieler bewegt, dann wird ein Spur-Kästchen erstellt. 
;Weil wenn das Programm die ganze Zeit Kästchen erstellt, kostet das nur Rechenleistung
;Außerdem sieht der Spieler diese nicht
If PlayerX <> Old_PlayerX Or PlayerY <> Old_PlayerY
 AddElement(Spur())   ;Der Befehl um eine neues Element der Liste Spur hinzufügen. 
  Spur()\X = PlayerX  ;Definiert die Variable X des zuvor erstellten Listen Elements
  Spur()\Y = PlayerY  
 Old_PlayerX = PlayerX 
 Old_PLayerY = PlayerY
EndIf 

StartDrawing(ScreenOutput())
 DrawingMode(1)
  DrawText(0,0,"Anzahl der Objekte Spur: "+Str(CountList(Spur())),#White)    ;Zählt die Elemente der Liste Spur
  DrawText(0,15,"Für das Löschen aller Objekte F12",#White)
StopDrawing()

;Darstellung
ForEach Spur()                   ;Für jedes Element der Liste Spur
 DisplaySprite(0,Spur()\X,Spur()\Y) ;Mache ein Bild auf dem Screen. 
Next                              ;Und ab zum nächsten Bild 

DisplaySprite(1,PlayerX,PlayerY)  ; Das ist das Bild des Spielers

Until KeyboardPushed(#PB_Key_Escape)
Wenn du noch fragen hast, nur zu^^

Verfasst: 07.03.2008 18:46
von PMV
PureMax hat geschrieben:aber es hinterlässt eine und mir reichts ^^
vllt bin ich ja ne kleiner noob oder wie auch immer ihr das ausdrücken mögt aber ich machs auf meine art ^^

mfg MAX
Sicher ... und nach 1 min Spielzeit kann man nichts mehr erkennen ...
entweder, weil die Augen wegen des flakerns angefangen haben zu
tränen ... oder weil das Bild voller springender Bälle ist.

Noob ist die Bezeichnung für "Anfänger" und solche sollten erst recht auf
die Ratschläge der anderen eingehen, wenn sie keine vernünftigen
Gegenargumente haben. :wink:

MFG PMV

Verfasst: 07.03.2008 19:09
von #NULL
Kaeru Gaman hat geschrieben:1. flirrt das bild fürchterlich, weil eben in jedem buffer jeder zweite kreis ist und
achso, stimmt ja. :freak:
ich hab mich dusslig gewundert warum ich die bälle in groesseren abständen sehe, wenn ich der bewegung mit dem auge folge, als wenn ich einen punkt fixiere. :mrgreen:

Verfasst: 07.03.2008 20:41
von Kaeru Gaman
also, ich versteh unter ner spur eher sowas:

Code: Alles auswählen

InitSprite()
InitKeyboard()
InitMouse()

OpenScreen(1024,768,32,"Spur")

Dim Spur.COORD(33)

#MaxD = 4

PX.f = 512 : PY.f = 384
MX = 512 : MY = 384
MouseLocate(MX,MY)

Repeat
  ExamineKeyboard()
  ExamineMouse()

  MX = MouseX()
  MY = MouseY()

  ClearScreen($302010)

  StartDrawing(ScreenOutput())
  For n=0 To 32
    Spur(n)\x = Spur(n+1)\x
    Spur(n)\y = Spur(n+1)\y
    If n%4 = 0
      Circle(Spur(n)\x, Spur(n)\y, 7, RGB(0,6*n+63, 3*n+31))
    EndIf
  Next
  Line(MX-4,MY,9,0,$00C0C0)
  Line(MX,MY-4,0,9,$00C0C0)
  StopDrawing()

  DX.f = (MX - PX) / 16
    If DX >  #MaxD : DX =  #MaxD : EndIf
    If DX < -#MaxD : DX = -#MaxD : EndIf
  DY.f = (MY - PY) / 16
    If DY >  #MaxD : DY =  #MaxD : EndIf
    If DY < -#MaxD : DY = -#MaxD : EndIf

  PX + DX : PY + DY
  Spur(33)\x = PX : Spur(33)\y = PY

  FlipBuffers()  

Until KeyboardPushed(#PB_Key_Escape)

Verfasst: 07.03.2008 21:02
von Milchshake
Ja, aber mit einer Liste finde ich es einfacher zu verstehen.
Aber es sind beides Möglichkeiten^^

Verfasst: 08.03.2008 00:44
von PMV
Milchshake hat geschrieben:Ja, aber mit einer Liste finde ich es einfacher zu verstehen.
Aber es sind beides Möglichkeiten^^
Aus Optimierungsgründen sind Arrays hier besser ... weil du ja eh vorher
weist, wie lang die Spurr am ende werden soll und somit, wie viele
Elemente es maximal hat :wink:

Möglich sind aber natürlich beide.

MFG PMV

Verfasst: 08.03.2008 01:10
von Kaeru Gaman
ich find das array besser, obwohl oder auch weil man das selber durchscrollt,
weil man dann die darstellungsfarbe direkt in bezug zum index setzen kann.
(wie man in meinem demo ja gut sehen kann)

LINIEN?!

Verfasst: 12.03.2008 18:21
von PureMax
okay ich blick da teiweise noch nich ganz durch aber naja das kommt schon noch hoffe ich.
noch ne frage. wie macht man linien?

Mfg MAX