Hintergrund Unter dem User bewegen

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2, 3, 4  Weiter

Neue Antwort erstellen

 

Bobo2040

Betreff: Hintergrund Unter dem User bewegen

BeitragMi, Jul 17, 2013 17:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Very Happy Ich hab noch nicht sonderlich viwl in BlitzBasic gemacht aber ich verusche mich an nem 2D spiel
und zwar funktioniert alles wie es soll also der User "Folgt" der maus bleibt aber dabei in der mitte des fensters stehen soll er auch ... aber ich möchte ,das die Map sich unter dem User bewegt und zwar dorthin wo der User hinklickt... also klickt er nach oben rechts dann soll die map sich unterihm bewegen ;D und zwar entgegengesetzt also die map soll dann nach unten links wandern damit es so aussieht als ob der User sich bewegt Very Happy
Aber wie kann ich das machen ?
Mein Code bissher ... klappt eig. alles wies soll ...
Code: [AUSKLAPPEN]

Graphics 640,480,16,2

SetBuffer BackBuffer()

ship_left_top = LoadImage("images/ship_left_top.png")
ship_top = LoadImage("images/ship_normal.png")
ship_right_top = LoadImage("images/ship_right_top.png")
;War die erste Reihe

ship_left = LoadImage("images/ship_left.png")
ship_normal = LoadImage("images/ship_normal.png")
ship_right = LoadImage("images/ship_right.png")
;War die 2te Reihe

ship_left_bottom = LoadImage("images/ship_left_bottom.png")
ship_bottom = LoadImage("images/ship_bottom.png")
ship_right_bottom = LoadImage("images/ship_right_bottom.png")
;Letzter Reihe
;Map
map = LoadImage("images/map.png")

;Musik Abspielen *_*
PlayMusic("sounds/bg_sound.mp3",1)
Repeat
Cls


y=MouseY() ;Maus Koordinaten
x=MouseX()

If MouseDown(1) Then
   If y<160 And x<218 Then
      DrawImage ship_left_top,230,180
      
   ElseIf y<160 And x<436 Then
      DrawImage ship_top,230,180
      
   ElseIf y<160 And x<640 Then
      DrawImage ship_right_top,230,180
      
   ElseIf y<320 And x<218 Then
      DrawImage ship_left,230,180
      
   ElseIf y<320 And x<436 Then
      DrawImage ship_normal,230,180
      
   ElseIf y<320 And x<640 Then
      DrawImage ship_right,230,180
      
   ElseIf y<480 And x<218 Then
      DrawImage ship_left_bottom,230,180
   
   ElseIf y<480 And x<436 Then
      DrawImage ship_bottom,230,180
      
   ElseIf y<480 And x<640 Then
      DrawImage ship_right_bottom,230,180
      
   EndIf
Else
   DrawImage ship_normal,230,180
EndIf
   
   ;rawImage map,230,180
   
Flip
Delay(5)
Until KeyHit(1)
End



EDIT:
Wie kann ich eig. die Hintergrund Grafik also Hintergrund Grafik machen? weil BB da ja nicht zwischen unterscheidet... weil momentan überlappen sich das schiff und der user -.-
  • Zuletzt bearbeitet von Bobo2040 am Mi, Jul 17, 2013 19:19, insgesamt einmal bearbeitet

Krusby

BeitragMi, Jul 17, 2013 18:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Was dir helfen könnte wären Robs Tutorials 1 - 6 zu RPG siehe mein Link !
Dort werden Grundlegende Sachen ganz gut erklärt auch Scrolling !

https://www.blitzforum.de/foru...light=robs
Gewinner des BCC 76

Midimaster

BeitragMi, Jul 17, 2013 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist im Grunde ganz einfach:

Du hast ein Koordinatensystem, die Welt ist darauf fest und unbeweglich. Der Spieler bewegt sich in dieser Welt. Die "Kamera" bewegt sich immer mit dem Spieler mit. Das sieht dann so aus, als ob der Untergrund sich bewegen würde.

Wenn Du alles so aufbaust, muss man wenig darüber nachdenken und es funktioniert "wie von selbst".
Beim Zeichnen wird von allen Koordinaten die Kamera immer abgezogen. Die Kamera befindet sich immer einen halben Bildschirm links und oben vom Spieler:


BlitzBasic: [AUSKLAPPEN]
Graphics 800,600
SetBuffer BackBuffer()


Global SpielerX=900
Global SpielerY=900

Repeat
Maus

KameraX=SpielerX-GraphicsWidth()/2;
KameraY=SpielerY-GraphicsHeight()/2
Cls
For i=0 To 20
For j=0 To 20
Text i*100-KameraX,j*100-KameraY,i+"/"+j
Next
Next
Oval SpielerX-KameraX-25,SpielerY-KameraY-25,50,50,0

Flip
Until KeyHit(1)


Function Maus()
y=MouseY() ;Maus Koordinaten
x=MouseX()

If MouseDown(1) Then
If y<160 And x<218 Then
SpielerX=SpielerX-1
SpielerY=SpielerY-1

ElseIf y<160 And x<436 Then
SpielerY=SpielerY-1
ElseIf y<160 And x<640 Then
SpielerX=SpielerX+1
SpielerY=SpielerY-1
ElseIf y<320 And x<218 Then
SpielerX=SpielerX-1
ElseIf y<320 And x<436 Then

ElseIf y<320 And x<640 Then
SpielerX=SpielerX+1

ElseIf y<480 And x<218 Then
SpielerX=SpielerX-1
SpielerY=SpielerY+1
ElseIf y<480 And x<436 Then
SpielerY=SpielerY+1
ElseIf y<480 And x<640 Then
SpielerX=SpielerX+1
SpielerY=SpielerY+1
EndIf
Else
EndIf

End Function
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Bobo2040

BeitragMi, Jul 17, 2013 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke das ist echt nett von dir Very Happy
Aber was bedeutet dieses "Maus" Nach repeat ?
 

Kruemelator

BeitragMi, Jul 17, 2013 21:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ein Funktionsaufruf, das selbe wie Maus()
 

Bobo2040

BeitragMi, Jul 17, 2013 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Aso okay danke Very Happy
Okay ich hab dann Noch ein Problem Very Happy
Und zwar wie kann ich jetzt für die Entsprechenden Koordinaten Andere Bilder fürs Schiffe ausgeben ?
 

Bobo2040

BeitragMi, Jul 17, 2013 22:31
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich habe das mal So abgeändert... aber sobald ich auf Run drücke Stürzt das Programm sofort ab -.-'
ICh weiß nicht wo mein Fehler ist kann mir jemand helfen bitte ?
Oder mache ich das alles komplett Falsch... ? Ich Arbeite viel in PHP und habs halt so gemacht wie ichs in PHP gelöst hätte...
Code: [AUSKLAPPEN]

Graphics 640,480,16,2
SetBuffer BackBuffer()


Global SpielerX=900
Global SpielerY=900
Global SpielerShip=LoadImage("/images/ship_normal.png")
Repeat
   Maus
   
   KameraX=SpielerX-GraphicsWidth()/2;
   KameraY=SpielerY-GraphicsHeight()/2
   Cls
   
   For i=0 To 20
      For j=0 To 20
         Text i*100-KameraX,j*100-KameraY,i+"/"+j
      Next
   Next
   
   DrawImage SpielerShip,SpielerX-KameraX-25,SpielerY-KameraY-25

   ;Oval SpielerX-KameraX-25,SpielerY-KameraY-25,50,50,0
   
   Flip
Until KeyHit(1)


Function Maus()
   y=MouseY() ;Maus Koordinaten
   x=MouseX()
   
   If MouseDown(1) Then
      If y<160 And x<218 Then
         SpielerX=SpielerX-10
         SpielerY=SpielerY-10
        SpielerShip=LoadImage("/images/ship_left_top.png")
      ElseIf y<160 And x<436 Then
         SpielerY=SpielerY-10
        SpielerShip=LoadImage("/images/ship_normal.png")
      ElseIf y<160 And x<640 Then
         SpielerX=SpielerX+10
         SpielerY=SpielerY-10   
        SpielerShip=LoadImage("/images/ship_right_top.png")   
      ElseIf y<320 And x<218 Then
         SpielerX=SpielerX-10
         SpielerShip=LoadImage("/images/ship_left.png")
      ElseIf y<320 And x<436 Then
         SpielerX=SpielerX+10
        SpielerY=SpielerY-10
        SpielerShip=LoadImage("/images/ship_normal.png")
      ElseIf y<320 And x<640 Then
         SpielerX=SpielerX+10
         SpielerShip=LoadImage("/images/ship_right.png")
      ElseIf y<480 And x<218 Then
         SpielerX=SpielerX-10
         SpielerY=SpielerY+10
         SpielerShip=LoadImage("/images/ship_left_bottom.png")
      ElseIf y<480 And x<436 Then
         SpielerY=SpielerY+10   
         SpielerShip=LoadImage("/images/ship_bottom.png")   
      ElseIf y<480 And x<640 Then
         SpielerX=SpielerX+10
         SpielerY=SpielerY+10   
         SpielerShip=LoadImage("/images/ship_right_bottom.png")     
      EndIf
   EndIf
End Function

Xeres

Moderator

BeitragMi, Jul 17, 2013 22:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Bitte vermeide Doppelposts.
Wenn du ein Problem hast, dann schalte den Debugger ein und nenne uns die Zeile, wo der Fehler auftritt - ansonsten können auch wir ewig suchen.

Benutze in deinem Code alle Load Funktionen nur ein mal vor der Hauptschleife. Würde dein Code ansonsten funktionieren, würdest du den Speicher per LoadImage so lange füllen bis er Platzt.
Benutze beim Aufruf von Funktionen immer Klammern - dann ist Ersichtlich, dass es eine Funktion ist und man vermeidet eine Menge undurchschaubarer Probleme.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Bobo2040

BeitragMi, Jul 17, 2013 23:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Er gibt mir die FehlerMeldung aus Invalid Image handle
Im Debug Log steht nix...
DrawImage SpielerShip,SpielerX-KameraX-25,SpielerY-KameraY-25

<-- Das hat er rot makiert... aber ich weiß nicht wo jetzt der fehler ist... Very Happy

Xeres

Moderator

BeitragDo, Jul 18, 2013 0:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde den Slash am Anfang vom Bildpfad weglassen. Ins Debuglog kannst du schreiben, ob die Bilder tatsächlich geladen wurden:
BlitzBasic: [AUSKLAPPEN]
Global SpielerShip=LoadImage("/images/ship_normal.png") 
DebugLog("SpielerShip = "+SpielerShip)

Wenn das Bild geladen werden konnte, kommt da eine Zahl ungleich 0 raus.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Bobo2040

BeitragDo, Jul 18, 2013 0:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay es wird kein Bild geladen... hmm... ich weiß aber auch nicht warum -.-'
Ich glaube aber das es daran Liegt,das die var SpielerShip in ner Funktion gesetzt wird... muss ich die dann auch global machen ? wird die dann überhaupt übergeben ? Aber eig. sollte er falls nicht übergeben wurde die ganz normal gesetzte globale SpielerShip benutzen..

Xeres

Moderator

BeitragDo, Jul 18, 2013 0:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Was Global gesetzt wurde, ist auch Global verfügar - also auch in Funktionen. Der Fehler wird beim Pfad liegen; z.B. könntest du "bekannte dateierweiterungen ausblenden" in den windows ordneroptionen aktiviert haben und das Bild heißt nun "ship_normal.png.png" - oder der Unterordner ist falsch geschrieben, oder ... Das könntest du alles mit Filetype debuggen.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Bobo2040

BeitragDo, Jul 18, 2013 0:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne wenn ich das Bild ganz normal Zeichnen Lasse klappts -.-

Midimaster

BeitragDo, Jul 18, 2013 9:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Du hast ja 8 verschiedene Schiff-Bilder. Die lädst Du alle zu Anfang in 8 verschiedene Variablen SpielerShip_1 bis SpielerShip_8. In der Maus() Funktion weist Du dann der Variablen SpielerShip die jeweils richtige zu:

BlitzBasic: [AUSKLAPPEN]
; alle 8 Bilder laden:
Global SpielerShip_1=LoadImage("images/ship_left_bottom.png")
Global SpielerShip_2=LoadImage("...")
....
; dem Originalbild schon mal eines zuweisen:
Global SpielerShip=SpielerShip_1
....
Function Maus()
....
If MouseDown(1) Then
If y<160 And x<218 Then
SpielerX=SpielerX-10
SpielerY=SpielerY-10
; jeweils das richtige zuweisen:
SpielerShip=SpielerShip_1
Else
.....
End Function
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe
 

Bobo2040

BeitragDo, Jul 18, 2013 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey cool danke ich probiers gleich mal aus Very Happy
Okay danke es hat funktioniert... das wäre das letzte auf das ich gekommen wäre Very Happy
Aber 2 Fragen warum musste ich die "doppelt" in einer Variable aufrufen ? Also die Bilder also warum konnte ich nicht einfach SpielerShip ändern je nach dem was für ein Bild geladen wurde.... ?
Und die 2. Frage ich möchte jetzt einen Hintergrund reinmachen aber wenn ich das BIld reinmache und Positioniert habe dann Dreht sich das Schiff ganz normal wie es soll aber es Bewegt sich nicht zur map... wie kann ich die map "fixieren" ? das das schiff auf der map fliegt ?
  • Zuletzt bearbeitet von Bobo2040 am Do, Jul 18, 2013 10:58, insgesamt einmal bearbeitet

Jamagin

Betreff: so gehts

BeitragDo, Jul 18, 2013 10:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ein kleiner Code wie es klappen könnte! Mit Types ginge es noch effizienter!

Code: [AUSKLAPPEN]

Graphics 640, 480, 16, 2
SetBuffer BackBuffer()

; *** neu zugefügt ***
Global frametimer = CreateTimer(60)
Global clip_w%          = 64
Global clip_h%          = 64
Global ship_first%      = 0
Global ship_frames%   = 10
Global ship_aktuell%    = 0
Global speedX#          = 10
Global speedY#         = 10
Global centerX%         = GraphicsWidth ()/2
Global centerY%         = GraphicsHeight ()/2
Global xleft%            = centerX-102
Global xright%         = centerX+102
; *** ende zugefügt ***

Global SpielerX = centerX
Global SpielerY = centerY

Global SpielerShip=LoadAnimImage("images/ships.png", clip_w, clip_h, ship_first, ship_frames)
   MaskImage SpielerShip, 10, 10, 10
   
Repeat
   Cls

   Maus()
   
   KameraX = SpielerX-GraphicsWidth()/2;
   KameraY = SpielerY-GraphicsHeight()/2
   
   For i = 0 To 20
      For j = 0 To 20
         Text i * 100 - KameraX, j * 100 - KameraY, i + "/" + j
      Next
   Next
   
   DrawImage SpielerShip, SpielerX - KameraX - 25, SpielerY - KameraY - 25, ship_aktuell

   ;Oval SpielerX-KameraX-25,SpielerY-KameraY-25,50,50,0
   Flip
   WaitTimer (frametimer)
Until KeyHit(1)


Function Maus()
   y = MouseY() ;Maus Koordinaten
   x = MouseX()
   Text 10, 10, "X = "+x
   Text 10, 25, "Y = "+y
   
   If MouseDown(1) Then

      ; Steuerung diagonal
      If y < 160
         If x < xleft Then
              SpielerX = SpielerX - speedX
               SpielerY = SpielerY - speedY
            ; diagonal links rauf
             ship_aktuell = 6
         ElseIf x > xright Then
              SpielerX = SpielerX + speedX
               SpielerY = SpielerY - speedY
            ; diagonal rechts rauf
             ship_aktuell = 7
         EndIf
      ElseIf y > 320
         If x < xleft Then
              SpielerX = SpielerX - speedX
               SpielerY = SpielerY + speedY
            ; diagonal links runter
             ship_aktuell = 8
         ElseIf x > xright Then
              SpielerX = SpielerX + speedX
               SpielerY = SpielerY + speedY
            ; diagonal rechts runter
             ship_aktuell = 9
         EndIf
      EndIf
      
      ; Steuerung normal
      If y > 160 And y < 320 Then
         If x < centerX Then
            SpielerX = SpielerX - speedX
            ; nach links
             ship_aktuell = 1
         ElseIf x > centerX Then
            SpielerX = SpielerX + speedX
            ; nach rechts
             ship_aktuell = 2
         EndIf
      ElseIf x > xleft And x < xright Then
         If y < centerY Then
            SpielerY = SpielerY - speedY
            ; nach oben
            ship_aktuell = 4
         ElseIf y > centerY Then
            SpielerY = SpielerY + speedY
            ; nach unten
            ship_aktuell = 5
         EndIf
      EndIf
   Else
      ship_aktuell = 0
   EndIf

End Function



http://www.tz-steiner.com/test/ships.png

Mit rechtsklick speichern unter...

lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte
 

Bobo2040

BeitragDo, Jul 18, 2013 11:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Habes Probiert geht aber nicht stürrztz sofort wieder ab ... ;D Danke aber auf jeden fall ^^
Finds echt cool das mir so viele so sehr helfen Very Happy gibts nicht in jedem forum !
Aber ich versteh den code nicht so ganz... da ist das schiff doch immer nur in eine richtung und dreht sich nicht... ?
Aber aus irgend einem grund geht dort sonst nichts ich kann bilder laden das wars keine Texte anzeigen lassen oder musik laufen lassen warum ?
Bei dem davor gings auch und geht immer noch nur das schiff fliegt beim alten nciht bei dem hier schon...
Also an der Musik oder so kanns nicht liegen weils ja beim anderen geht und beide daten liegen im selben ordner also ist auch der verweiß richtig ... er ruft es einfach nicht ab ... -.-'
  • Zuletzt bearbeitet von Bobo2040 am Do, Jul 18, 2013 11:15, insgesamt einmal bearbeitet

Jamagin

BeitragDo, Jul 18, 2013 11:12
Antworten mit Zitat
Benutzer-Profile anzeigen
du mußt das bild runterladen und in deinem ordner einen ordner namens Images anlegen und da das bild reinspeichern, dann geht's!!!!!!!


lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte
 

Bobo2040

BeitragDo, Jul 18, 2013 11:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab ich probiert.... son voll noob bin ich schon nicht Very Happy das ist mir klar das ist das bild unter images/ships.png abspeichern muss... aber das Programm stürtzt direkt ab ...
Ich benutze BlitzPlus vllt. hat das was damit zu tun... ist Version 1.47 also die aktuellste

Jamagin

BeitragDo, Jul 18, 2013 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Echt komisch!!!

Ich hab das jetzt auch mit BlitzPlus getestet und es klappt!



lg. Jamagin
Bevor du etwas neues beginnst, erledige das alte

Gehe zu Seite 1, 2, 3, 4  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group