Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

07.04.2010, 17:02

Du erhöhst ei jedem Durchgang deinen x Wert um die halbe Bildschirmbreite und gehst analog mit dem y Wert vor.
Lass dieses + fPlayerX bzw. + fPlayerY mal weg.

Ich weiß jetzt nicht wie lange dein Programm warten wird aber eventuell wird auch die Schleife in sehr kurzen intervallen durchlaufen, weswegen du das gar nicht mehr siehst. Wenn man bedenkt, dass du deine Map pro Durchlauf bisher um die halbe Bildschirmbreite verschoben hast, ist es eigentlich kein Wunder, dass du nur noch schwarz gesehen hast :)

M0rgenstern

Frischling

  • »M0rgenstern« ist der Autor dieses Themas

Beiträge: 9

Beruf: Schüler

  • Private Nachricht senden

12

07.04.2010, 23:09

Hey.
Also, ich habe jetzt das Scrollen komplett und fehlerfrei implementiert.
Aber die Mauskoordinaten zu berechnen klappen nicht so, wie ihr es vorgeschlagen habt.
Ich hab im Prinzip direkt die Pixelangaben der Maus genommen, damit es passt.
Jetzt weiß ich aber nicht, wie ich das auf die Tiles umrechnen soll.
Denn wenn ich durch die Größe der Tiles rechne, dann bekomme ich kein vernünftiges Ergebnis.
Also, momentan lasse ich ein bestimmtes Tilebild direkt an der Maus anzeigen. Aber ich muss die Mauskoordinaten ja im Prinzip umrechnen, damit ich ein entsprechendes Tile ansprechen kann.

Lg, M0rgenstern
Meine private Spieleschmiede:
http://www.siliziumbrain.de

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

13

08.04.2010, 09:20

du musst die mauskoordinaten mit dem scrollvektor addieren.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

M0rgenstern

Frischling

  • »M0rgenstern« ist der Autor dieses Themas

Beiträge: 9

Beruf: Schüler

  • Private Nachricht senden

14

10.04.2010, 21:43

Vielen Dank erstmal für eure Hilfe.
Ich habs jetzt durch diverse Quellen geschafft das ganze funktionierend umzusetzen.
Mein einziges Problem ist die Kollision.
Ich habe ein Maparray mit 3 dimensionen. DIe 3. Dimension gibt den Layer an. Auf Layer 2 liegen die Kollisionen.
Das Problem ist halt, das ganze Pixelgenau zu prüfen. Was erschwerend hinzukommt: Der Spieler wird zur Maus ausgerichtet und seine Bewegung dann mit Sinus und Cosinus berechnet.
Der Kollision wegen lass ich dann einfach die neue Position auf die Mapvariablen umrechnen und schaue nach ob an dieser Stelle im 2. Layer eine Kollision ist oder nicht.
Das klappt, wenn sich entsprechendes Tile über oder links vom Player befindet. Wenn es unter oder rechts von ihm ist dann schlägt die Kollision immer ein Tile später an.
Ich hab hier einfach mal den COde dazu:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Method Move(pscrollx:Float, pscrolly:Float)
        fAngle = ATan2(fX - MouseX() - pscrollx, MouseY() + pscrolly - fY)
        Local iNumberOfKeys:Int = KeyDown(Key_w) + KeyDown(key_a) + KeyDown(key_s) + KeyDown(Key_d)
        Local fOldX:Float = fx
        Local fOldy:Float = fy
        Local fNewx:Float = fx, fNewy:Float = fy
'       
'   
        If KeyDown(KEY_W) Then
            fNewx = (fX - Sin(fAngle) * (fSpeed / iNumberOfKeys))
            fNewy = (fY + Cos(fAngle) * (fSpeed / iNumberOfKeys))
        EndIf
   
        'Links
        If KeyDown(KEY_A) Then
            fNewx = (fX + Sin(fAngle + 90) * (fSpeed / iNumberOfKeys))
            fNewy = (fY - Cos(fAngle + 90) * (fSpeed / iNumberOfKeys))
        EndIf
   
        'Rechts
        If KeyDown(KEY_D) Then
            fNewx = (fX - Sin(fAngle + 90) * (fSpeed / iNumberOfKeys))
            fNewy = (fY + Cos(fAngle + 90) * (fSpeed / iNumberOfKeys))
        EndIf
   
        'Nach hinten
        If KeyDown(KEY_S) Then
            fNewx = (fX + Sin(fAngle) * (fSpeed / iNumberOfKeys))
            fNewy = (fY - Cos(fAngle) * (fSpeed / iNumberOfKeys))
        EndIf
        
        Local MapX:Int = fnewx / itilesize
        Local mapy:Int = fnewy / itilesize
        
        If (MapX < iMapwidth - 1) And (MapX > - 1) Then
                If (mapy < iMapheight - 1) And (mapy > - 1) Then
                    If (iGameMap[MapX, mapy, 2] = 0) Then
                    
                    fX = fNewx
                    fY = fNewy
                        
                EndIf
            EndIf
        EndIf
                    
        
        If (fX < 0) Then fX = 0
        If ((fX / iTilesize) > iMapwidth - 1) Then fX = ((iMapwidth - 1) * iTilesize)
        If (fY < 0) Then fY = 0
        If ((fY / iTilesize) > iMapheight - 1) Then fY = ((iMapheight - 1) * iTilesize)

    End Method


Ich weiß nicht, aber wäre schön wenn da jemand was wüsste.
Lg, M0rgenstern
Meine private Spieleschmiede:
http://www.siliziumbrain.de

15

10.04.2010, 22:59

Ich habe jetzt nicht deinen Code durchgesehen aber bedenke, dass du mit der Tileposition meist nicht die Mitte sondern die linke obere Kante des Tiles angibst.

M0rgenstern

Frischling

  • »M0rgenstern« ist der Autor dieses Themas

Beiträge: 9

Beruf: Schüler

  • Private Nachricht senden

16

11.04.2010, 11:54

Ja, ich habs schon rausgefunden.
Vielen Dank^^

Lg, M0rgenstern
Meine private Spieleschmiede:
http://www.siliziumbrain.de

Werbeanzeige