Logikproblem - Koordinaten
Übersicht

![]() |
ozzi789Betreff: Logikproblem - Koordinaten |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi
Ich stehe gerade total auf dem Schlauch! Folgendes Szenario Der Spieler steht immer in der Mitte des Bildschirmes ,X=400,Y=300 Wenn der Spieler sich bewegt, bewegt sich jedoch der Boden (welcher einfach ein Bild ist und mit Tileimage gezeichnet wird) Wie kann nun die entgültige Position des Players rausfinden in der Relation des Boden herausfinden? Ich blick gar nicht mehr durch Oo mfg |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] pos_x = img_x - 400
pos_y = img_Y - 300 |
||
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2 |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@D2006
Nein, so habs ichs auch schon mal probiert, aber iwie wenn ich dem Player ein Objekt folgen lasse fliegt es immer total falsch Oo Kleiner Nachgebauter Code Funkt vorne und hinten nicht << Code: [AUSKLAPPEN] Graphics 800,600,32,2
SeedRnd MilliSecs() timer = CreateTimer (60) Dim FPS(3) water=CreateImage(10,10) SetBuffer ImageBuffer(water) Color 0,0,255 Oval 0,0,10,10,1 SetBuffer BackBuffer() xe#=200 ye#=100 reichweite=100 player_speed=5 x#=0 y#=0 x2#=400 y2#=300 While Not KeyHit(1) Cls TileImage water,x#,y# Line x2#,y2#,x2#+20*Cos(kp),y2#+20*Sin(kp) Oval x2#-5,y2#-5,10,10,1 If KeyDown(205) Then kp=kp+1 If KeyDown(203) Then kp=kp-1 If KeyDown(208) Then x# = x# + Cos(kp)*player_speed y# = y# + Sin(kp)*player_speed EndIf If KeyDown(200) Then x# = x# - Cos(kp)*player_speed y# = y# - Sin(kp)*player_speed EndIf Color 255,255,255 Rect 300,0,340,20,1 Color 255,0,0 Text 300,0,"x: "+x+" y: "+y Text 9,9,"Frames :"+FPS(1):FPS(2)=FPS(2)+1:If MilliSecs()>FPS(3)+999 Then FPS(1)=FPS(2):FPS(2)=0:FPS(3)=MilliSecs() mx=x-400 my=y-300 Text 50,50,"MousX"+MouseX()+" MousY"+MouseY() we# = (ATan2(mx-xe#,my-ye#)+360) Mod 360 se# = Sqr((mx-xe#)^2+(my-ye#)^2) ve# = se# / 20 xe# = xe#-Sin(360-we#) * ve# ye# = ye#+Cos(360-we#) * ve# Rect xe#-10,ye#-10,20,20,1 WaitTimer timer Flip 0 Wend FreeTimer timer End |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
- Zuletzt bearbeitet von ozzi789 am Di, Dez 16, 2008 13:26, insgesamt einmal bearbeitet
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne code ist deine Beschreibung nicht genau genug um dir helfen zu können... Das wäre jetzt alles nur geraten. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@FDM
Siehe oben Das lustige ist wenn ich als Position für das Objekt MouseX() und MouseY() nehm funktioniert es (wenn ich die Maus in die Mitte des Fensters halte) wenn ich jedoch 400 300 nehme geht es nicht ![]() *verwirt* |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, bei dem Code wäre ich auch verwirrt. Hab mal kurz was geproggt...
Strukur! Wenn du keine saubere Struktur in deinem Code hast, dann machst du es dir unnötig kompliziert. Hab jetzt einen Player-Type, einen Enemy-Type und die Kameraposition. Die Kameraposition wird immer auf die Spielerkoordinate gesetzt, mit dem negativen Offset von x=-GraphicsWidth/2 und y=-graphicsHeight/2. Dadurch wird die Kamera immer auf den Spieler zentriert. Wichtig: Kameraposition NACH Bewegen des Spielers setzen, sonst ist sie nicht akkurat. Die Map wird dann genauso wie alle anderen Spielobjekte eingezeichnet, einfach das Kameraoffset davon abziehen, voila! Code: [AUSKLAPPEN] Global camPos#[2] Type Player Field pos#[2] End Type Type Enemy Field pos#[2] End Type Function DrawEnemy() For e.enemy = Each enemy Color 255,0,0 Oval e\pos[0] - camPos[0]-5, e\pos[1] - camPos[1]-5,10,10 Next End Function Function DrawPlayer() Color 0,255,0 For p.player = Each player Oval p\pos[0] - camPos[0] - 5, p\pos[1] - camPos[1] - 5,10,10 Next End Function Function DrawMap() TileImage mapImg,-camPos[0],-camPos[1] End Function p.player = New Player e.enemy = New Enemy camPos[0] = 0 camPos[1] = 0 Graphics 800,600 SetBuffer BackBuffer() Global mapImg = CreateImage(10,10) SetBuffer ImageBuffer(mapImg) Color 0,0,255 Rect 1,1,8,8 SetBuffer BackBuffer() Repeat Cls If KeyDown(205) Then p\pos[0] = p\pos[0]+2 If KeyDown(203) Then p\pos[0] = p\pos[0]-2 If KeyDown(208) Then p\pos[1] = p\pos[1]+2 If KeyDown(200) Then p\pos[1] = p\pos[1]-2 camPos[0] = p\pos[0] - 400 camPos[1] = p\pos[1] - 300 DrawMap() DrawPlayer() drawEnemy() Text 10,10,(MouseX()+camPos[0])+" / "+(MouseY()+camPos[1]) Flip Until KeyHit(1) End |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
ozzi789 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aha danke es hat *click* gemacht ![]() Keks geb! mfg Edit: Ich hab es so hingekriegt das ich Punkte eintragen kann und die auch so bleiben, wenn ich jedoch jetzt diese Gummiband funktion einbaue gelingt es mir einfach nicht ![]() *schäm* (Wenn mir nur schon jemand sagen könnte wie ich die genaue Position von dem Player rausfinde wär ich dankbar) Code: [AUSKLAPPEN] Type shot Field x Field y Field w Field age End Type Type dot Field dx Field dy End Type Graphics 800,600,32,2 SeedRnd MilliSecs() water= CreateImage (160,120) SetBuffer ImageBuffer (water) Color 0,0,255 Oval 20,20,40,40 For times=1 To 50 d.dot=New dot d\dx=rnd(-800,800) d\dy=rnd(-800,800) Next SetBuffer BackBuffer() Global kw=0 Global x#=400, y#=300 player_speed=2 x2#=400 y2#=300 While Not KeyHit(1) If KeyHit(57) s.shot=New shot s\x=x2 s\y=y2 s\w=kw EndIf TileBlock water,x#,y# Oval x2#-5,y2#-5,10,10,1 Line x2#,y2#,x2#+20*Cos(kw),y2#+20*Sin(kw) If KeyDown(205) Then kw=kw+1 If KeyDown(203) Then kw=kw-1 If KeyDown(208) Then x# = x# + Cos(kw)*player_speed y# = y# + Sin(kw)*player_speed EndIf If KeyDown(200) Then x# = x# - Cos(kw)*player_speed y# = y# - Sin(kw)*player_speed EndIf For s.shot=Each shot ;Jeden Schuss abfragen s\age=s\age+1 s\x=s\x+Cos(s\w)*5 ;Bewegen s\y=s\y+Sin(s\w)*5 ;Bewegen Oval s\x-1,s\y-1,10,10,1 ;Zeichnen If s\age > 100 Then Delete s.shot Next For d.dot=Each dot ;Jeden Schuss abfragen Color 255,0,255 Oval d\dx+x,d\dy+y,10,10,1 ;Zeichnen Color 255,255,255 Next mx=x2+x my=y2+y rr=ATan2(my-(y2+y),mx-(x2+x)) rw=rw+Sgn(Sin(rr-rw))*1 If Sqr((mx-(x2+x))^2+(my-(y2+y))^2)>40 Then xp=xp+Cos(rw)/5 yp=yp+Sin(rw)/5 End If Color 255,0,0 Line xp,yp,xp+Cos(rw)*10,yp+Sin(rw)*10 Color 255,255,255 Rect mx-4,my-4,9,9,0 Oval xp-4,yp-4,9,9,0 Flip 60 Cls Wend End |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group