types??? *neue Frage*

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Schoasch

Betreff: types??? *neue Frage*

BeitragMi, Apr 11, 2007 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Wink
Also ich kenn mich mit Types so gut wie nicht aus. Ich hab paar tuts durchgelesen und chek gleich 0. Hab nur verstanden das man da eben was definieren kann z.B. Telefonnummer und Adresse blablabla...
Jetzt weis ich aba net was sich das bringt. Wenn ich zum Beispiel ne Variable mit Telefonnummer brauch dann mach ich Telefonnummer = blablabla
Das is sowas von kompliziert... Sad
sry das ich das mit den Types nicht chek aber plz helft mir weiter Sad
Danke schon mal im Vorraus
Schoasch
  • Zuletzt bearbeitet von Schoasch am Sa, Apr 14, 2007 8:08, insgesamt einmal bearbeitet

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Apr 11, 2007 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Da die die Tutorials anscheinend nicht zusprechen, so gebe ich dir mal ein kleinen Beispielcode. Ich lerne mit sowas am besten. Code: [AUSKLAPPEN]
Graphics3D 400,400,0,2
SetBuffer BackBuffer()

Type flare
 Field xp#
 Field yp#
 Field xg#
 Field yg#
 Field at%
 Field fa%
End Type

xp#=0
yp#=0
xg#=0
yg#=0


While Not KeyHit(1)
 xp=MouseX()
 yp=MouseY()
 xg=MouseXSpeed()
 yg=MouseYSpeed()
 xg=xg/120
 yg=yg/120

 If MouseDown(1) Then
  fla.flare=New flare
  fla\fa=Rand(0,255)
  fla\xp=xp
  fla\yp=yp
  fla\xg=xg+Rnd(-.02,.02)
  fla\yg=yg+Rnd(-.02,.02)
 End If

 For fla.flare=Each flare
  fla\xp=fla\xp+fla\xg*td
  fla\yp=fla\yp+fla\yg*td
  If fla\xp>400 Or fla\xp<0 Then fla\xg=-fla\xg
  If fla\yp>400 Or fla\yp<0 Then fla\yg=-fla\yg
  fla\at=fla\at+1
  Color 255,fla\fa,255-fla\fa
  Rect fla\xp-2,fla\yp-2,5,5,1
  If fla\at>1000 Then Delete fla
 Next

 td=MilliSecs()-tp
 tp=MilliSecs()

 Flip
 Cls
Wend
End
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMi, Apr 11, 2007 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Im Prinzip funktionieren Types wie ein Karteikasten.
Also alle durchgehen und einzelne löschen oder einfügen, usw
[BB2D | BB3D | BB+]

Dottakopf

BeitragMi, Apr 11, 2007 21:11
Antworten mit Zitat
Benutzer-Profile anzeigen
ist gut gemeinst hectic, aber ich glaube nicht, dass er das verstehen wird...
(Vielleicht n paar komentare dazu ...)

Ich probiere mal mein glück:

Ok types, was sind types überhaupt ? und was machen die ?

Mit types kann man Gegenstände/Objekte mit verschiedenen Eigenschaften verwalten. So wie Kateikärtchen... Mit ihnen ist es möglich rießige Soldaten Heere oder tausende Sterne zu bewegen. Und jedes dieser einzelnen Objekte hat seine eigenen Eingenschaften und kann unabhängig von den anderen agieren. So wie bei Schnee z.B. Keine Schneeflocke ist wie die andere... Sie haben verschiedene Größen,Geschwindigkeiten,Flugbahnen, Farben und selbst verständlich andere Positionen.


Ok aber wie setzte ich das jetzt um ?? (Schneeflocken beispiel)

Also zuerst müssen wir einmal sagen was wir überhaupt wollen--> einen Schnee type indem wir dann unsere Eigenschaften Speichern.

Also:
Code: [AUSKLAPPEN]

type Schnee
  field schnee_x
  field schnee_y
  field Schnee_größe
  field schnee_geschwindgkeit
  field schnee_farbe
end type


Ok jetzt haben wir die Eigenschaften des Schnees festgelegt.
Nun müssen wir Gott spielen und eine Schneeflocke auf dem Bildschirm erstellen. Nachdem wir aber immerwieder neue Flocken haben wollen machen wir das ganze in einer Schleife:

Code: [AUSKLAPPEN]

repeat
cls

  info.schnee = new Schnee         ;flocke erstellen (info = weil es a type ist)
       
      info\schnee_x = rnd(0,800)  ;zufällige schnee posi
      info\schnee_y = -20              ;irgendwo überhalb des bildschirms
      info\große .....
         usw




So jetzt haben wir schnee "erstellt" und ihm Start posis zugewiesen. Doch jetzt fragt sich der Pc was soll ich bitte damit machen? Also sagen wir es ihm

---> lasse JEDEN Schnee nach unten fallen



Code: [AUSKLAPPEN]


  for info.schnee = each schnee

      info\schnee_y = info\schnee_y +10 ;(oder +info\schnee_speed)

      ;sollte der schnee den unteren Bildschirmrand erreichen lösche diesen
      if info\schnee_y >= 600 then delete info.schnee
      rect info\schnee_x,info\schnee_y,info\schnee_größe,info\schnee_größe
  next

flip
until keyhit(1) ;ende der hauptschleife


Das ist die absolut vereinfachte version. Wenn man das jetzt aber so stehen lässt, ist das doof weil bb die Schneeflocken ohne Zeitliche abstände erstellt. Also müsste man für "schnee feeling" einen counter einbauen und das bevor man die flocke erstellt:



Code: [AUSKLAPPEN]


 ;zähler einbauen
   warte_zähler = warte_zähler +1

   if warte_zähler >= 10 then
        warte_zähler = 0        ;damit es wieder von vorne losgeht

              info.schnee = new Schnee  ;schnee erstellen(wie oben)




Funktionstüchtig sieht das dan so aus :

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()




Type Schnee
  Field schnee_x
  Field schnee_y
  Field Schnee_grose
  Field schnee_geschwindgkeit
End Type


Repeat
Cls

 
  warte_zahler = warte_zahler +1

  If warte_zahler >=10 Then
     warte_zahler = 0
 
        info.schnee = New Schnee       
       
             info\schnee_x = Rnd(0,800) 
             info\schnee_y = -20             
             info\schnee_grose = Rnd(2,3)
             info\schnee_geschwindgkeit  = Rnd(3,5)
             
  End If


  For info.schnee = Each schnee
 
        info\schnee_y = info\schnee_y + info\schnee_geschwindgkeit
          Rect info\schnee_x, info\schnee_y,info\schnee_grose,info\schnee_grose
          If info\schnee_y >= 601 Then Delete info.schnee
       
  Next



Flip
Until KeyHit(1)
  • Zuletzt bearbeitet von Dottakopf am Mi, Apr 11, 2007 22:02, insgesamt 9-mal bearbeitet

aMul

Sieger des Minimalist Compo 01/13

BeitragMi, Apr 11, 2007 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal davon abgesehen, dass du gleich zwei verschiedene Types benutzt, obwohl du nur von einem sprichst(und auch nur einen meinst), was an sich schon schlimm genug ist, finde ich deine Erklärung sehr verwirrend.

Selbst helfen kann ich leider auch nicht. Ich war noch nie gut im Erklären und Tipps geben kann ich hierzu nicht, da ich selbst nicht mehr weiß wie ich es gelernt hab... ich konnte es einfach Mr. Green
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Dottakopf

BeitragMi, Apr 11, 2007 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
ach du heilige maria ! Gott ist das Peinlich !

Jup in erklären bin ich auch kein reißer ^^ mal schauen vielleicht kann ich des noch irgendwie hin editieren ...

P.S. hectic dein progi find ich total lustig... meine schwester dreht grad voll am radel ^^

Ok mal schauen was sich retten lässt Embarassed
Rechtschreibfehler gelten der allgemeinen Belustigung!
 

darki

BeitragMi, Apr 11, 2007 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Also types fand ich auch immer schwierig bis ich sie verstanden habe. Nun finde ich sie total cool. Also gelernt habe ic sie am besten mit diesem tutorial:http://www.robsite.de/daten/tutorials/bb_type_tut.pdf
Danach etwas experimentiert und gefragt und schon ging es. Wenn du dieses tutorial schon gelesen hast denn entschuldige ich mich und bitte die adims diesen beitrag zu löschen.

Mfg darki

Smily

BeitragMi, Apr 11, 2007 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Also types waren für mich auch eine der schwierigsten dinge, als ich mit bb angefangen habe.
Ich hab es mir dann am ende mehr oder weniger selbst beigebracht, indem ich mir einfach ein paar Beispiele angesehen habe, wo types verwendet wurden.

Auf der CD zum Buch "Spiele Programmieren mit Blitz Basic" von Rene sind ne menge Beispielcodes, durch die habe ich Types im großen und ganzen verstanden.

Leider hab ich die CD atm nicht hier und kann die Codes deswegen nicht hochladen ^^ vlt erklärt sich ja jemand anderes berreit, dies zu tun.

Edit: ein ganz Primitiver Code, wo types verwendet werden.
Vielleicht hilfts dir ja:

Code: [AUSKLAPPEN]
Type star
 Field x
 Field y
End Type

Graphics 800,600,16,2
Repeat
   If MouseHit(1)
      star.star = New star
      star\x = MouseX()
      star\y = MouseY()
   End If
   Cls
   For star.star = Each star
      Plot star\x, star\y
   Next
   Flip
Until KeyHit(1)
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org

garret

BeitragDo, Apr 12, 2007 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Alternativ kannst du dir auch meinen alten Senf angucken:
https://www.blitzforum.de/foru...ght=garret

Laut AFRO scheint mir das damals ganz verständlich gelungen zu sein.

MfG garret
>>nec aspera terrent<< (Auch Widerwärtigkeiten schrecken nicht)
 

Schoasch

Betreff: thx!!

BeitragDo, Apr 12, 2007 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke an alle Wink Ihr seit Great Wink
Ich kenn mich jetzt mit Types aus!! (oder eben mit dem was ich wissen muss xD)
Danke noch mal an alle die mir geholfen haben!!
Schoasch Wink
 

Schoasch

Betreff: noch ne frage xD

BeitragDo, Apr 12, 2007 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
ok also ich würde jetzt gerne prüfen ob eine meiner Regentropfen mit einem Rechteck collidiert ich hab das jetzt mal so gemacht :

If RectsOverlap(ax,ay,65,40,lala\x,lala\y,0.6,lala\Laenge) Then Text 0,0, "collision"

die regentropfen bestehen aus länglichen Rechtecken also sollte das gehen Sad aber BB lässt das leider nicht zu Sad
plz helft mir

danke schon mal im Vorraus:
Schoasch
 

darki

BeitragDo, Apr 12, 2007 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Es wäre hilfreich wenn du den ganzen code postest. Gibt BB dir eine fehlermeldung? Oder passiert im programm einfach nichts?

mfg darki
 

Schoasch

Betreff: der code

BeitragDo, Apr 12, 2007 18:37
Antworten mit Zitat
Benutzer-Profile anzeigen
er gibt ne fehlermeldung: object does not exsist
also mal der code:

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()


Type Regen
   Field x
   Field y
   Field Geschwindigkeit
   Field Laenge
End Type

Color 0,0,255
ClsColor 0,0,25   

ax = 0
ay = 537

Repeat
Cls

wartezaehler = wartezaehler + 1

If wartezaehler >= 10 Then
   wartezaehler = 0


   lala.Regen = New Regen
   
   lala\x = Rnd(0,800)
   lala\y = -20
   lala\Geschwindigkeit = Rnd(9,13)
   lala\Laenge = Rnd(15,20)
   
EndIf
   
For lala.Regen = Each Regen
      lala\y = lala\y + lala\Geschwindigkeit
      Rect lala\x,lala\y,0.6,lala\Laenge
      
   If lala\y >= 601 Then Delete lala.Regen

Next

Rect ax,ay,65,40

If RectsOverlap(ax,ay,65,40,lala\x,lala\y,0.6,lala\Laenge) Then Text 0,0, "collide"


Flip
Until KeyHit(1)



und plz sagt nicht das ich für die x,y position für das rechteck nen type nehmen sollte ... xD
 

darki

BeitragDo, Apr 12, 2007 18:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Tut mir leid ich finde nichts Crying or Very sad

skey-z

BeitragDo, Apr 12, 2007 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen
kann es vielleicht sein, dass es an dem 0.6 liegt?

ein Pixel hat im Normalfall eine breite von 1 und nicht 0.6 oder sonstiges.
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz
BAC#57: 2. Platz
Twitter
 

Schoasch

Betreff: :(

BeitragDo, Apr 12, 2007 19:16
Antworten mit Zitat
Benutzer-Profile anzeigen
nein leider Sad : objekt does not exist Sad

ShadowJumper

BeitragDo, Apr 12, 2007 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
ich vermute es liegt an deinem Zähler
durch den wird am anfang noch kein regentropfen erstellt
es kann keine Kollision überprüft werden
fehler
ich weiß es aber net genau und habs net getestet

du könntest das ENDIF für den Zähler hinter die Kollisionsprüfung setzen oder eine Repeat...Until Schleife (anstatt der Bedingun) nehmen
einfach da ma n bissl probieren

(wie schon gesagt, ich bin mir nicht sicher)

Thorsten

BeitragDo, Apr 12, 2007 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Hm, wollt ihr mich verarschen?
Das liegt doch gar nicht in der erforderlichen Schleife.
Solltet euch wohl mal eine Pause gönnen oO

Code: [AUSKLAPPEN]

 Graphics 800,600,16,2
SetBuffer BackBuffer()


Type Regen
   Field x
   Field y
   Field Geschwindigkeit
   Field Laenge
End Type

Color 0,0,255
ClsColor 0,0,25   

ax = 0
ay = 537

Repeat
Cls

wartezaehler = wartezaehler + 1

If wartezaehler >= 10 Then
   wartezaehler = 0


   lala.Regen = New Regen
   
   lala\x = Rnd(0,800)
   lala\y = -20
   lala\Geschwindigkeit = Rnd(9,13)
   lala\Laenge = Rnd(15,20)
   
EndIf
   
For lala.Regen = Each Regen
      lala\y = lala\y + lala\Geschwindigkeit
      Rect lala\x,lala\y,0.6,lala\Laenge
     
      ;dieser Abschnitt hier
      If RectsOverlap(ax,ay,65,40,lala\x,lala\y,0.6,lala\Laenge) Then Text 0,0, "collide"
      ;-------------------------

   If lala\y >= 601 Then Delete lala.Regen


Next

Rect ax,ay,65,40


Flip
Until KeyHit(1)


mfG,

Thorsten

garret

BeitragDo, Apr 12, 2007 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Du begehst einen im Umgang mit Types häufigen Fehler.

Hier gehst du die einzelnen Einträge durch und löschst die nicht mehr benötigten. Soweit richtig.
Code: [AUSKLAPPEN]

For lala.Regen = Each Regen
      lala\y = lala\y + lala\Geschwindigkeit
      Rect lala\x,lala\y,0.6,lala\Laenge
     
   If lala\y >= 601 Then Delete lala.Regen


Eine Zeile weiter willst du jedoch auf den nicht mehr vorhandenen Eintrag zugreifen:

Code: [AUSKLAPPEN]

If RectsOverlap(ax,ay,65,40,lala\x,lala\y,0.6,lala\Laenge) Then Text 0,0,"collide"


Die Fehlermeldung kommt also daher, dass du auf ein nicht mehr vorhandenes (da mit Delete gelöschtes) Objekt zugreifen willst.

Lösung?

Den Codeteil, der den Eintrag löscht, an's Ende der For-Each-Schleife setzen oder überprüfen, ob die einzelnen Einträge vorhanden sind:

Code: [AUSKLAPPEN]

; Variante A
For lala.Regen = Each Regen
      lala\y = lala\y + lala\Geschwindigkeit
      Rect lala\x,lala\y,0.6,lala\Laenge
     
If RectsOverlap(ax,ay,65,40,lala\x,lala\y,0.6,lala\Laenge) Then Text 0,0,"collide"

   If lala\y >= 601 Then Delete lala.Regen

Next


; Variante B

For lala.Regen = Each Regen
      lala\y = lala\y + lala\Geschwindigkeit
      Rect lala\x,lala\y,0.6,lala\Laenge
     
   If lala\y >= 601 Then Delete lala.Regen

If lala<>Null
If RectsOverlap(ax,ay,65,40,lala\x,lala\y,0.6,lala\Laenge) Then Text 0,0,"collide"
EndIf

Next


Ich bevorzuge A, da man dann nicht extra eine Abfrage machen muss. Wenn ein Type-Eintrag nicht mehr benötigt wird, wird er am Ende der For-Each-Schleife gelöscht.

@BlindGuy: 1. Dich würde doch niemand "verarschen".
2. Eine Erklärung deiner "Lösung" wäre nicht schlecht!

@Schoasch: Allerdings hilft auch hier die Foren-Suche. Der Fehler ist wie gesagt sehr häufig:

https://www.blitzforum.de/foru...esnt+exist


MfG garret

Thorsten

BeitragDo, Apr 12, 2007 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Mh die Lösung war aber so simpel, und ein ziemlich erfahrener User (Skey-Z) hat auf etwas Unerhebliches hingewiesen.
Danach kommt ein zweiter User, der auf etwas noch unerheblicheres hinweist.
Da kommt so die Idee, jemand verteilt hier gratis Drogen

...

Thorsten

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group