Logikproblem - Koordinaten

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ozzi789

Betreff: Logikproblem - Koordinaten

BeitragDi, Dez 16, 2008 13:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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

D2006

Administrator

BeitragDi, Dez 16, 2008 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 16, 2008 13:16
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDi, Dez 16, 2008 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 16, 2008 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Rolling Eyes
*verwirt*
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Firstdeathmaker

BeitragDi, Dez 16, 2008 14:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Dez 16, 2008 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Aha danke es hat *click* gemacht Smile
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 Confused
*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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group