Bild immer in der mitte.

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

 

Broco

Betreff: Bild immer in der mitte.

BeitragDo, Jun 13, 2013 14:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich wollte mal wissen wie es geht dass ein Bild immer in der mitte des Bildschirms ist,
also dass wenn ich den Spieler habe und ich ihn bewege dass der spieler in der Mitte bleibt.
Danke schonmal im vorraus
 

CO2

ehemals "SirMO"

BeitragDo, Jun 13, 2013 15:00
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
DrawImage(SpielerBild, (GraphicsWidth() / 2) - (ImageWidth(SpielerBild) / 2), (GraphicsHeight() / 2) - (ImageHeight(SpielerBild) / 2))


Einfacher geht es natürlich, wenn du das ImageHandle in die Mitte des Spielerbildes setzt, dann reicht
BlitzBasic: [AUSKLAPPEN]
MidHandle(SpielerBild)

DrawImage(SpielerBild, (GraphicsWidth() / 2), (GraphicsHeight() / 2))


Zur Erklärung:
-> Oberes Beispiel: DrawImage malt den Spieler, SpielerBild muss natürlich ein geladenes Bild sein...
GraphicsWidth() - Gibt die eingestellte "Bildschirmbreite" in Pixeln aus
GraphicsHeight() - Das selbe mit der Höhe
ImageWidth() - Gibt die Breite des Bildes zurück (Achtung: Nur bei Einzelnen Bildern verwenden (Also nicht einen gesamten Bilder-Strip)
ImageHeight() - Gibt die Höhe zurück...
-> Unteres Beispiel: MidHandle(SpielerBild) - Setzt die Handle-Position des Bildes in die Mitte des Bildes
mfG, CO²

Sprachen: BlitzMax, C, C++, C#, Java
Hardware: Windows 7 Ultimate 64-Bit, AMX FX-6350 (6x3,9 GHz), 32 GB RAM, Nvidia GeForce GTX 750 Ti
 

Broco

BeitragDo, Jun 13, 2013 15:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok danke Smile
jetzt mal ganz dumm gefragt, wie kann ich damit eine steuerung machen?
 

bjh

BeitragDo, Jun 13, 2013 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
willst du, dass die spielfigur immer in der bildmitte ist und sich der rest bewegt?
oder willst du was anderes machen?
 

Kruemelator

BeitragDo, Jun 13, 2013 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn der Spieler auf dem Bildschirm immer die selbe Position haben soll, dann musst du einfach den ganzen Rest verschieben.
Führe zwei neue Variablen ein.
z.B.: xverschubx, yverschub
Die kommen dann beim Malen vor alles außer dem Spielerbild.
BlitzBasic: [AUSKLAPPEN]
DrawImage bild,xverschub+bildxposition,yverschub+bildyposition

xverschub und yverschub werden dann durch Tasteneingaben des Spielers verändert, als wären sie die Position des Spielers.
 

Broco

BeitragDo, Jun 13, 2013 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich will dass der spieler nach rechts und links laufen kann und hoch springen kann und dass bild soll sich nur nach rechts und links bewegen.
 

bjh

BeitragDo, Jun 13, 2013 16:55
Antworten mit Zitat
Benutzer-Profile anzeigen
also so im 2d stil?

wie schon gesagt, du musst einfach den ganzen hintergrund verschieben.

hast du schon einen ansatz und eine konkrete frage?
 

Broco

BeitragDo, Jun 13, 2013 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Smile
Also meine idee wäre ein Spiel in der art von super mario
 

bjh

BeitragDo, Jun 13, 2013 17:20
Antworten mit Zitat
Benutzer-Profile anzeigen
dann würd ich dir vorschlagen, erstmal ein feld zu erstellen:
BlitzBasic: [AUSKLAPPEN]
Dim map(spielfeldlänge,spielfeldhöhe)

dann speicherst du in dem feld ab, wo was ist, z.b. luft, stein oder was auch immer. einfach eine zahl z.b. für luft die 0 und für stein die 1 verwenden.
dann zeichnest du die sichtibaren felder auf den bildschirm.

bevor ich hier zu viel schreibe, solltest du mir am besten sagen, was du nicht verstehst oder wie weit du schon bist.
am besten wäre ein codeausschnitt falls der schon überhaupt existiert. Wink
 

Broco

BeitragDo, Jun 13, 2013 19:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Also das ist bis jetzt mein code:
Code: [AUSKLAPPEN]
Graphics 640,600
SetBuffer BackBuffer()

;sprites
player = LoadImage("player.png")
background= LoadImage("background.png")


p_x#=400   
p_y#=500

bg_x=0      
bg_y=0


;masks
MaskImage player,255,255,255


Repeat
Cls
   
If KeyDown(30) Then
   bg_x=bg_x+1
EndIf

If KeyDown(32) Then
   bg_x=bg_x-1
End If
      
   DrawImage background,bg_x,bg_y
   MidHandle(player)

   DrawImage(player, (GraphicsWidth() / 2),p_y)

   Flip

Until KeyDown(1)
End

Mit arrays hab ich mich noch nicht soviel auseinander gesetzt und wüsste nicht was ich machen soll
 

bjh

BeitragDo, Jun 13, 2013 20:16
Antworten mit Zitat
Benutzer-Profile anzeigen
das mit dem midhandle musst du nur einmal ausführen. am besten natürlich direkt nach dem laden.

und das mit dem hintergrund würd ich mit einem feld machen.
ich programmier dir schnell ein beispiel. Wink
 

Kruemelator

BeitragDo, Jun 13, 2013 20:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Grundsätzlich ist es richtig, es fehlt nur noch das du den Spieler hoch und runter bewegst. Die Variablen dafür hast du schon: p_x und p_y
Das machst du genau wie mit dem Hintergrund, nur das du hier in Y Richtung bewegst.

Kleine Anmerkungen:
- MidHandle(player) brauchst du nur einmal genutzten direkt nach dem laden des Bildes.
- Gewöhn dir an sauber zu schreiben, z.B. alles in der Schleife einen Tab weiter rechts und das was in den Ifs steht ncoh einen Tab weiter, das macht den Code für dich WESENDLICH übersichtlicher.
- Informiere dich mal über CreateTimer und Waittimer und benutze dann Flip 0.
 

bjh

BeitragDo, Jun 13, 2013 20:38
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
;timer und fenster + backbuffer
Graphics 640,480,32,2
SetBuffer BackBuffer()

timer=CreateTimer(60)

Dim map(99,14)

;zufällig füllen
For x=0 To 99
For y=Rand(3,11) To 14
map(x,y)=1
Next
Next

;bild wird erstellt
stein=CreateImage(32,32)
LockBuffer ImageBuffer(stein)
For x=0 To 63
For y=0 To 63
WritePixelFast x,y,Rand(96,192)*65793,ImageBuffer(stein)
Next
Next
UnlockBuffer ImageBuffer(stein)

While KeyHit(1)=0
Cls

;bewegen
If KeyDown(205) p_x=p_x+1
If KeyDown(203) p_x=p_x-1
p_x=(p_x+100)Mod 100

;zeichnen
For x=0 To 19
For y=0 To 14
If map((x+p_x)Mod 100,y)=1 DrawImage stein,x*32,y*32
Next
Next

Flip 0
WaitTimer timer
Wend
End


hier hab ich das mit dem timer gleich mal so rein gemacht, wie es sein sollte.
ich hab ne map zufällig erstellt. dadurch kannst du dann auch später die kollisionen einfach programmieren.
 

Broco

BeitragDo, Jun 13, 2013 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay super dankeschön, echt ne super community Smile
Eine Frage hätte ich noch und zwar wie ich am besten die Kollisionen mache.
 

bjh

BeitragDo, Jun 13, 2013 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
das ist nicht ganz so einfach.
dafür musst du überprüfen, ob der spieler in einem block drin steckt und ihn dann eventuell verschieben.

ich hab kein plan, wie ich dir das genau erklären soll. Wink

wie lange programmierst du schon?

ich würde dir ein beispiel schreiben, in dem du mit einer figur auf einer zufälligen map herumlaufen kannst, weil, wenn das dein erstes richtiges spiel ist, du das vielleicht nicht so schnell hinbekommen würdest. Wink

am besten ist es natürlich auf alles selbst zu kommen, aber bei mir hat ein beispiel immer sehr gut geholfen.
 

Broco

BeitragDo, Jun 13, 2013 21:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab mir vor ca. einem jahr ein buch über java gekauft java war mir dann aber doch ein bisschen zu schwer, mit blitzbasic programmier ich jetzt seit ungefähr einer Woche, also ist dass mein erstes richtiges Programm. Very Happy
 

bjh

BeitragDo, Jun 13, 2013 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, dann wünsch ich dir viel spaß und ein gutes gelingen.
und wenn du dir ein beispielprogramm wünschst, dann bekommst du eins, in dem alles ganz klar beschrieben ist.
aber das würde ein bisschen dauern. ich denke, dass ichs morgen abend fertig haben kann. Wink
aber natürlich nur wenn du willst.
 

Broco

BeitragDo, Jun 13, 2013 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Also schaden tut es ja sicherlich nicht Very Happy
Aber wenn dass ein großer aufwand ist, ist das nicht nötig ich krieg dass schon hin Smile
Danke nochmal Smile
 

bjh

BeitragDo, Jun 13, 2013 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, auftrag angenommen.
bis morgen Very Happy
 

Broco

BeitragDo, Jun 13, 2013 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok vielen dank Smile

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group