Komische Schlange
Übersicht BlitzMax, BlitzMax NG Codearchiv & Module
Suco-XBetreff: Komische Schlange |
Mo, Mai 16, 2005 12:48 Antworten mit Zitat |
|
---|---|---|
Hi.
Hier mal der Code wo ich mit einer Snake Steuerung rumgespielt habe. Die Schlange benimmt sich etwas ungewöhnlich Steuerung mit Pfeiltasten. Code: [AUSKLAPPEN] 'Snake Steuerung by Suco-X 'Viel Spass. 'Prinzip meiner Snake Steuerung Rem Das Prinzip ist einfacher als man denkt. Es gibt 3 Types. TSnake, TSnakeHead und TSnakeBody. In TSnake sind die Grunddaten drin die jeweils von TSnakeHead und TSnakeBody geerbt werden. Jeder erstellt Snake Kopf bekommt seine Bodys zu beginn zugeteilt. Jeder dieser Bodys hat einen Parent. Der Erste hat den SnakeKopf als Parent und die restlichen jeweils einen Body. Die Steuerung des Snake Kopfes erfolgt ber Sin/Cos (normale 08/15 Steuerung). Jeder Snake Body findet den Winkel von Sich selbst zu seinem Parent raus und setzt ihn so Wenn der Radius zwischen einem Body und seinem parent zu Gro(>Objekt Radius) wird, bekommt die Speed Variable einen Wert zugewiesen. So setzt sich angefangen vom Kopf bis zum Schwanz diese Realistisch wirkende Schlange zusammen. Der Code kanns dir besser erklren. Mfg Suco end rem Strict Framework brl.basic Import BRL.pngloader Import BRL.glmax2d Type TSnake Field x:Float, y:Float Field Radius:Float Field speed:Float Field Angle:Float Field Image:TIMage Method GetSpeed:Float() Return self.Speed End Method Method AddAngle(Value:Float) self.Angle:+Value End Method Method SetPosition(x:Float, y:Float) self.x = x self.y = y End Method Method GetX:Float() Return self.X End Method Method GetY:Float() Return self.Y End Method Method Set(Image:TIMage, Speed:Float, Radius:Float ) self.Image = Image self.Speed = Speed self.Radius = Radius End Method Method SetImage(Image:TImage) self.Image = image End Method Method GetImage:TImage() Return self.Image End Method End Type TSnakeHead.hHeadList = New TList Type TSnakeHead Extends TSnake Global hHeadList:TList Field hBodyList:TList Field hMaxBodys:Int = 10 Method New() self.hHeadList.AddLast(Self) End Method Function GetInstance:TSnakeHead() Return New TSnakeHead End Function Function RenderAndUpdate() For Local TempObject:TSnakeHead = EachIn self.hHeadList TempObject.Update() TempObject.Render() Next End Function Method RenderAndUpdateBodys() For Local TempObject:TSnakeBody = EachIn self.hBodyList TempObject.Update() TempObject.Render() Next End Method Method SetData(x:Float, y:Float, Image:TImage, Speed:Float) self.SetPosition(x,y) self.Set(Image,Speed,Image.Width) self.CreateBodys() End Method Method AddBody() Local FirstBody:TSnakeBody FirstBody = TSnakeBody(self.hBodyList.Last()) If FirstBody = Null Return EndIf Local NewBody:TSnakeBody = TSnakeBody.GetInstance() NewBody.hParent = FirstBody NewBody.SetData(FirstBody.GetX(),FirstBody.GetY(),FirstBody.image,FirstBody.speed) NewBody.IsLast = True FirstBody.IsLast = False self.hBodyList.AddLast(NewBody) self.hMaxBodys:+1 End Method Method CreateBodys() self.hBodyList = Null self.hBodyList = New TList Local LastBody:TSnakeBody = Null Local TempBody:TSnakeBody = Null For Local i:Int = 0 Until self.hMaxBodys TempBody = TSnakeBody.GetInstance() TempBody.SetData(self.GetX(),self.GetY(),snakebody_img,0.0) If i = 0 TempBody.hParent = Self Else TempBody.hParent = LastBody EndIf LastBody = TempBody self.hBodyList.AddLast(TempBody) Next TempBody.IsLast = True End Method Method Update() self.x:+Sin(self.Angle)*self.Speed self.y:-Cos(self.Angle)*self.Speed self.RenderAndUpdateBodys() End Method Method Render() ResetStates() SetBlend ALPHABLEND SetScale 1.4,1.4 SetRotation self.Angle SetColor 30,30,30 SetAlpha 0.6 DrawImage self.Image,self.GetX()+10,self.GetY() SetColor 255,255,255 SetAlpha 1.0 DrawImage self.Image,self.GetX(),self.GetY() End Method End Type Type TSnakeBody Extends TSnake Field hParent:TSnake = Null Field OldSpeed:Float Field IsLast:Byte = False Function GetInstance:TSnakeBody() Return New TSnakeBody End Function Method SetData(x:Float, y:Float, Image:TImage, Speed:Float) self.SetPosition(x,y) self.Set(Image,Speed,Image.Width) End Method Method Update() If self.hParent Local TempAngle:Float = WInkel2D(self.GetX(),self.GetY(),self.hParent.GetX(),self.hParent.GetY()) Local TempDistance:Float = Distance2D(self.GetX(),self.GetY(),self.hParent.GetX(),self.hParent.GetY()) self.Speed = (TempDistance>self.Radius)*self.hParent.Speed self.Angle = TempAngle EndIf self.x:+Sin(self.Angle)*self.Speed self.y:-Cos(self.Angle)*self.Speed End Method Method Render() ResetStates() SetBlend ALPHABLEND SetRotation self.Angle SetColor 30,30,30 SetAlpha 0.7 DrawImage self.Image,self.GetX()+5,self.GetY() SetAlpha 1.0 SetColor 255,255,255 DrawImage self.Image,self.GetX(),self.GetY() End Method End Type Graphics 1024,768,32,60 AutoMidHandle True Global snakehead_img = CreateImage(32,32) Global snakebody_img = CreateImage(32,32) Global tile_img = CreateImage(32,32) SetColor 0,255,0 DrawOval 0,0,32,32 SetColor 0,0,255 DrawOval 10,10,4,4 DrawOval 20,10,4,4 GrabImage(snakehead_img,0,0) SetColor 0,150,0 DrawOval 0,0,32,32 GrabImage(snakebody_img,0,0) SetColor 100,60,100 DrawRect 0,0,32,32 glPolygonMode(GL_BACK, GL_LINE) SetColor 200,100,100 DrawRect 0,0,32,32 glPolygonMode(GL_BACK, GL_FILL) GrabImage(tile_img,0,0) Local Snake1:TSnakeHead = TSNakeHead.GetInstance() Snake1.SetData(GraphicsWidth()/2,GraphicsHeight()/2,snakehead_img,2.5) Repeat Cls DrawText "PRESS RETURN TO START",GraphicsWidth()/2,GraphicsHeight()/2 If KeyHit(KEY_RETURN) Exit EndIf Flip FlushMem() Forever Repeat Cls If KeyDown(KEY_LEFT) Snake1.AddAngle(-(Snake1.GetSpeed()*1.0)) ElseIf KeyDown(KEY_RIGHT) Snake1.AddAngle((Snake1.GetSpeed()*1.0)) EndIf If Rand(0,200) = 1 Snake1.AddBody() EndIf ResetStates() TileImage tile_img,0,0 TSnakeHead.RenderAndUpdate() Flip FlushMem() Until KeyHit(KEY_ESCAPE) Function ResetStates() SetColor 255,255,255 SetRotation 0.0 SetScale 1.0,1.0 SetAlpha 1.0 SetBlend MASKBLEND End Function Function Distance2D:Float(x1:Float,y1:Float,x2:Float,y2:Float) Local Result:Float = 0.0 result = Sqr(((x1-x2)*(x1-x2))+((y1-y2)*(y1-y2))) Return result End Function Function Winkel2D(x1:Float,y1:Float,x2:Float,y2:Float) Return Float(ATan2(y1-y2,x1-x2)+270) Mod 360 End Function Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Markus2 |
Mo, Mai 16, 2005 16:16 Antworten mit Zitat |
|
---|---|---|
Nett
Eine ist aus dem Fenster geflohen |
||
stfighter01 |
Mo, Mai 16, 2005 17:09 Antworten mit Zitat |
|
---|---|---|
nette sache.
wenn dus noch schaffst den drehwinkel der einzelelemente zu begrenzen, sag ich meister zu dir. |
||
Denken hilft! |
DA |
Mo, Mai 16, 2005 17:23 Antworten mit Zitat |
|
---|---|---|
Moin,
Mhm. Mit der Demo krieg ich nach kurzer Zeit ein "Memory Access Violation"? Könnte das vieleicht an der Demo liegen? Thx DarkAngel |
||
Deutscher Blitz Basic Chat |
Suco-XBetreff: ...... |
Mi, Mai 18, 2005 12:10 Antworten mit Zitat |
|
---|---|---|
@DarkAngel : Keine ahnung was das sein könnte. Vllt hat er Probleme beim erstellen der Grafiken.
@STFighter : Versteh nicht genau was du meinst Mfg Suco |
||
Intel Core 2 Quad Q8300, 4× 2500 MHz, 4096 MB DDR2-Ram, GeForce 9600GT 512 MB |
Blitzkrieg Bop |
Mi, Mai 18, 2005 13:13 Antworten mit Zitat |
|
---|---|---|
Hi!
Nice Suco. @DA: Ne, mit meiner Demo gehts auch |
||
~ Hey Ho Let's Go ~ |
diGGaGruppenKaspar |
Mi, Mai 18, 2005 13:53 Antworten mit Zitat |
|
---|---|---|
DarkAngel hat Folgendes geschrieben: Moin,
Mhm. Mit der Demo krieg ich nach kurzer Zeit ein "Memory Access Violation"? Könnte das vieleicht an der Demo liegen? Thx DarkAngel vielleicht hattest du den blitzchat an xD |
||
Gestern Nacht Schlug der Regen an mein Fenster
Ich ging durch das dunkle Zimmer und glaubte im Licht der Straßenlampe Den Geist unseres jahrhunderts auf der Straße zu sehen Der uns sagte, daß wir alle am Rande des Abgrunds stehen. - Al Steward Athlon 64 3000+ / Radeon 9600 / 1024mb ddram |
DA |
Do, Mai 19, 2005 20:02 Antworten mit Zitat |
|
---|---|---|
Moin,
hoppla. Hat wirklich den BlitzChat am laufen . Habs jetzt nochmal getestet, jetzt gehts. Thx DarkAngel |
||
Deutscher Blitz Basic Chat |
Ninja |
Mo, Jul 11, 2005 13:11 Antworten mit Zitat |
|
---|---|---|
hi Suco,
Schöner wär's wenn alle den selben weg wie der Kopf zurücklegen würden, besonders wenn ich einen "hügel" bilde wird dieser abgeflacht, hoffe du verstehst was ich meine. |
||
Übersicht BlitzMax, BlitzMax NG Codearchiv & Module
Powered by phpBB © 2001 - 2006, phpBB Group