2D-Weltraum & Cursor erschaffen

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

kamehan

Betreff: 2D-Weltraum & Cursor erschaffen

BeitragFr, Aug 18, 2006 8:54
Antworten mit Zitat
Benutzer-Profile anzeigen
hab schon etwas länger mit blitzbasic zu tun, mich aber nie ernsthaft damit beschäftigt weshalb ich nun sehr schnell an meine grenzen stoße.
im moment versuche ich mich an einem recht kleinen spiel in das ich mich seit 2 tagen ziemlich reinknie,
und zwar will ich eine 2d umgebung mit draufsicht erschaffen, in der man sich selbstverständlich frei bewegen kann, dabei soll der "player" sich ausschließlich in der mitte des screens aufhalten, der screen bewegt sich also mit (dumm für mich zu erklären)
jedenfalls soll der player irgendwann an die grenze diese raumes stoßen, dabei bleibt der screen stehen so dass sich der player nur noch bis zum rand bewegen kann und dann ist schluß, leider versage ich dabei auf ganzer linie..
im moment sieht es so aus das der player sich bewegt, am oberen rand rausgeht und unten wieder erscheint..ich weiß nicht mehr wie ich das hinbekommen habe xD

lange rede kurzer sinn: es würde mir sehr helfen (und dafür wäre ich ziemlich dankbar) wenn mir jemand so eine umgebung überlassen würde, am besten editorfreundlich, auch wenn es nur ansatzweise ist

ich danke nochmal in der hoffnung das mir jemand helfen kann und das euch nicht die augen bluten xD
  • Zuletzt bearbeitet von kamehan am Sa, Aug 19, 2006 17:35, insgesamt einmal bearbeitet

Hagbard

BeitragFr, Aug 18, 2006 9:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
wie wäre es, wenn du den relevanten Teil deines Codes postest und wir helfen dir damit weiter...
Natürlich hilft dir auch ein fremder Code, aber vielleicht wäre es nützlicher, wenn du deinen Fehler, bzw. die Lösung an deine, Ansatz siehst...

Grundsätzlich hört sich dein Problem an nach einer falschen Bedingung an...

Du müsstest bei Kollision des Raumschiffs/Bildschirms mit den Koordinaten, bei denen das Spiel zu Ende ist, einfach einbauen, dass Raumschiff/Bldschirm nicht mehr weiterkönnen...

Wenn jetzt aber wie du beschrieben hast das Raumschiff in der Mitte fliegt, dann stößt meiner Meinung nach erst der Bildschirm auf diese Schlusskoordinaten und das Raumschiff kann von der Mitte aus noch bis zum Rand also den Stoppkoordinaten fliegen.
Das müsstest du wohl auch noch beachten. edit: meintest du ja schon selbst... gerade hier wäre dein Code gut

(Jetzt wollte ich gerade noch etwas hinzufügen, Codebeispiele, denke aber dass du erstmal etwas dazu schreiben kannst!)
  • Zuletzt bearbeitet von Hagbard am Sa, Apr 17, 2010 20:55, insgesamt einmal bearbeitet

kamehan

BeitragFr, Aug 18, 2006 10:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm sorry aber ich hatte nicht vor den code irgendwie noch zu nutzen weil der so dermaßen durcheinander und verwirrend ist das selbst ich nicht mehr durchfinde, deswegen wollte ich das ganze vollkommen neu machen weshalb ich ihn hier nicht reinschrieb...
also ich glaub nicht das der alte code was an dieser stelle nutzt, oder ist das doch so wichtig?
 

Dreamora

BeitragFr, Aug 18, 2006 10:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier die prinzipielle Idee:

- Wenn Spieler an fixer Position bleiben soll und Welt sich bewegen -> Bewege die Welt bei Tastendruck, nicht den Spieler, und zwar in die Gegenrichtung dessen in welche der Spieler sich bewegt.

- Stoppen am Rand ist einfach. Du musst dir für die 4 Ecken oder Seiten nur virtuelle Positionen merken (also wenn sich der Spieler nach links bewegen würde, wird seine virtuelle X Position vergrössert etc). Solange die virtuelle Position im erlaubten bereich ist, bewegt sich die welt, sobald er über die grenzen will bleibt sie in diese richtung stehen. ist der gleiche check wie den den du machen würdest ob der spieler den rand erreicht hat

editorfreundlich ist das alle mal, da der Editor mit dem genau gleichen Handlingsystem arbeitet wie das Spiel, musst dir nur speicher und laderoutinen schreiben und so.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Christoph

BeitragFr, Aug 18, 2006 10:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstelle einfach 2 Scrollvariablen: xback und yback benutze ich immer dafür.

1. Xback speichert die Verschiebung der Fläche Horizontal.
2. Yback speichert die Verschiebung der Fläche Vegetal.

Nun kann man das so machen:
Code: [AUSKLAPPEN]
xback=raumschiffx+imagewidth(raumschiff)/2-graphicswidth()/2
yback=raumschiffy+imageheight(raumschiff)/2-graphicsheight()/2

Ich nehme einfach die Mitte des Raumschiffes und ziehe die Hälfe des Bildschirms ab. Dann habe ich xback und yback
Jetzt muss ich noch festlegen bis wohin sie dürfen:
Code: [AUSKLAPPEN]
if xback<0 then xback=0
if yback<0 then yback=0
if yback>spielflaechey-graphicsheight() then yback=spielflaechey-graphicsheight()
if xback>spielflaeche-graphicswidth() then yback= spielfläche-graphicswidth()

Nun bewegt sich die "Kamera" nur noch in deinen Bereich.
Jetzt muss die Variablen x- und yback nur noch Einfluss auf das Gezeichnete haben. Ziehe von jeder Koordinate xback und yback ab:
Code: [AUSKLAPPEN]
drawimage raumschiff,raumschiffx-xback,raumschiffy-yback
drawimage gegner,gegnerx-xback,gegnery-yback
drawimage asteorid, asteoridx-xback,asteoridy-yback

fertig Idea

kamehan

BeitragFr, Aug 18, 2006 11:49
Antworten mit Zitat
Benutzer-Profile anzeigen
ah cool damit läßt sich sicher was anfangen..danke!

Schranz0r

BeitragFr, Aug 18, 2006 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn der Spieler sich immer bewegen soll, und sich quasi nur der Background bewegt , kann man das super Coden:

Zitat Onlinehilfe:

Code: [AUSKLAPPEN]

GRAPHICS 640,480,0,1
SETBUFFER BACKBUFFER()

DIM X(100), Y(100), V(100)
FOR i=0 TO 100
   X(i)=RND(0,639)
   Y(i)=RND(0,479)
   V(i)=RND(1,10)
NEXT

WHILE KEYHIT(1)=0
   CLS
   FOR i=0 TO 100
      Y(i)=Y(i)+V(i)
      IF Y(i)>479 THEN Y(i)=0: V(i)=RND(1,10)
      PLOT X(i),Y(i)
   NEXT
   FLIP
WEND


Finde ich relativ gut für so games Very Happy

kamehan

BeitragFr, Aug 18, 2006 14:48
Antworten mit Zitat
Benutzer-Profile anzeigen
verdammt wo steht denn sowas in der online-hilfe? da findet man ja nix aber recht haste, das ist wesentlich einfacher als der code von christoph..thx nochma

Schranz0r

BeitragFr, Aug 18, 2006 14:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Siehe onlinehilfe mom.


http://www.blitzbase.de/befehle2d/dim.htm

Wer sucht, der findet Very Happy

Wenn du was schönes gebaut hast, sag uns bescheid Wink

Grüße Franz

kamehan

BeitragFr, Aug 18, 2006 15:10
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh der dim-mist xD
na gut, das muß man erstmal wissen Razz
ahja das zock, wird halt sowas wie asteroid (son arcade-game), hab dafür haufen schnippsel von hier und da zusammengetragen, deswegen keine ordnung aber das wird...
brauch aber noch viele sachen wo ich sowieso nochmal hier fragen muß, zum beispiel warum ich keinen mauspfeil sehen kann wenn ich das programm starte, muß wissen wie ich umfangreiche optionen erstelle, wie ich profile mache usw x.X
wird hart für mich aber darauf komm ich später zurück, auf jeden fall stell ichs hier vor wenn es wenigstens ne ordentliche pre-version gibt...
gut ding will weile haben <.<
 

Dreamora

BeitragFr, Aug 18, 2006 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Was deine Fragen betrifft: Indem du ein Optionsmenü programmierst und die Daten speicherst und später wieder lädst. Das gilt für Optionen als auch Profile.

Mauspfeil: Schau mal in der hilfe die mouse befehle an Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

kamehan

BeitragFr, Aug 18, 2006 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
ahh mouse X und Y *klatsch* ...das mir immer einer innen arsch treten muß^^
na gut, jetzt will ich nochmal zum thema züruck kommen: ich bekomms nicht gebacken! Evil or Very Mad
mittlerweile kenn ich auch die originalversion, n kumpel hatse mir leicht bearbeitet geschickt mit der meinung es wär ne gute grundlage für mein zock, aber mit den codes hier zum scrollen des hintergrunds kann ich da nix anfangen...
jeder hat das original in seinem samples-ordner -> blitz 2d samples -> aristoids
ziemlich lächerlich das spiel aber naja, vielleicht kann man mir nun etwas besser helfen..hoffe ich Embarassed

kamehan

BeitragSa, Aug 19, 2006 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab jetzt den cursor, aber man kann ihn nicht sehen und ich versteh nicht warum...kann mir da einer helfen?

Code: [AUSKLAPPEN]
Function GameMenu()

Local temp_state = game_state

FlushMouse()
FlushKeys()

Repeat
ClsColor 0,0,0
Cls
   Color 0,0,255
   Text GraphicsWidth()/2,100,"Menu",1,1
   
   
   Color 255,255,255
   Text GraphicsWidth()/2,400,"START"
   
   Color 255,255,255
   Text GraphicsWidth()/2,500,"END"

   
   If MouseHit(1)
      If RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,400,StringWidth("START"),StringHeight("START"))
         game_state = game_main
      ElseIf RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,500,StringWidth("END"),StringHeight("END"))
         game_state = game_over
      EndIf
   EndIf
   
   
   If KeyHit(1)
      End
   EndIf
     
Flip
Until game_state<>temp_state

cursor = LoadImage("Data\GFX\cursor.bmp")
 Repeat
 Cls
 X = MouseX()
 Y = MouseY()
 DrawImage cursor, X, Y
 Flip
 Until GetMouse() = 2

End Function

der gesamte code kommt übrigens von irgendwo hier aus diesem forum, man kann mit dem cursor interagieren und mit etwas glück auf "start" klicken...dazu kommt dass dieses programm ziemlich lange laden muß nachdem ich auf start klicke was ich wiederrum auch nicht verstehe :/

Schranz0r

BeitragSa, Aug 19, 2006 14:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Poste doch mal deinen aktuellen Code ins Forum, dann können wir dir besser Helfen Very Happy

Zu deiner frage wieso dein mauspointer nicht angezeigt wird:

Wie gesagt ich weis jetzt nicht wie du es gemacht hast, ich schreib trotzdem mal was dazu Shocked

BlitzBasic: [AUSKLAPPEN]


...
Mauszeiger = LoadImage("maus.pgn")
MausX = MouseX()
MausY = MouseY()
.....

;Dein code

...
;Wenn du dann deine Bilder Zeichnen lässt, dann musst du deinen Mauszeiger am schluss reinschreiben

DrawImage Ufo,UfoX,UfoY ;Nur so als bsp.
DrawImage Hud,0,0 ;dein hud laden :D
...
...
...
DrawImage Mauszeiger,MausX,MausY ; GANZ AM SCHLUSS EINFÜGEN, ES SOLL JA ÜBER ALLEN BILDERN SEIN

Flip
....

kamehan

BeitragSa, Aug 19, 2006 17:31
Antworten mit Zitat
Benutzer-Profile anzeigen
http://kamehan.kilu2.de/Test.rar
das ist der aktuelle code, hab neu angefangen (war ja nichts großes) und hab son grundaufbau tutorial hier aus dem forum benutzt
maus geht dennoch nicht..hab ja DrawImage usw benutzt, aber wie gesagt, geht nich Sad

ok wenns besser ist, hier der originale code aus diesem tut, ist aber alles das gleiche nur mit dem unterschied, das es noch gar keine maus gibt..glaub ich^^:
Code: [AUSKLAPPEN]
Graphics 1024,768,16,2
SetBuffer BackBuffer()

SetFont(LoadFont("Comic Sans MS",30,1))

Const game_pause = 1
Const game_menue = 2
Const game_haupt = 3
Const game_over  = 4

Global game_zustand = game_menue


;Wichtig. Hauptschleife. Hier wird das ganze Spiel verwaltet.

Repeat


Select game_zustand
   Case game_menue
      GameMenue()
   Case game_haupt
      GameHaupt()
   Case game_pause
      GamePause()
End Select


Until game_zustand = game_over
End





Function GameMenue()

Local temp_zustand = game_zustand

FlushMouse()
FlushKeys()

Repeat
ClsColor 0,0,0
Cls
   Color 0,0,255
   Text GraphicsWidth()/2,100,"ICH BIN DAS MENUE!!!",1,1
   
   
   Color 255,255,255
   Text GraphicsWidth()/2,400,"START"
   
   Color 255,255,255
   Text GraphicsWidth()/2,500,"ENDE"

   
   If MouseHit(1)
      If RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,400,StringWidth("START"),StringHeight("START"))
         game_zustand = game_haupt
      ElseIf RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,500,StringWidth("ENDE"),StringHeight("ENDE"))
         game_zustand = game_over
      EndIf
   EndIf
   
   
   If KeyHit(1)
      End
   EndIf
     
Flip
Until game_zustand<>temp_zustand

End Function





Function GameHaupt()

Local temp_zustand = game_zustand
Local x = GraphicsWidth()/2
Local y = GraphicsHeight()/2
Local h = 0

FlushKeys()
FlushMouse()

Repeat
ClsColor 200,200,200
Cls

h = (h+1) Mod 360

Color 0,0,255
Text x+Sin(h)*50,y-Cos(h)*100,"ICH BIN DAS SPIEL!! Escape Taste für Menue/Space für Pause",1,1


If KeyHit(57)
   game_zustand = game_pause
EndIf


If KeyHit(1)
   game_zustand = game_menue
EndIf

Flip
Until game_zustand<>temp_zustand

End Function






Function GamePause()

Local temp_zustand = game_zustand

FlushKeys()
FlushMouse()

Repeat
ClsColor 255,0,0
Cls
   
   Color 0,0,255
   Text GraphicsWidth()/2,GraphicsHeight()/2,"ICH BIN DIE PAUSE!!!",1,1
   
   If KeyHit(57)
      game_zustand = game_haupt
   EndIf
   
Flip
Until game_zustand<>temp_zustand

End Function

kamehan

BeitragSa, Aug 19, 2006 19:12
Antworten mit Zitat
Benutzer-Profile anzeigen

Schranz0r

BeitragSa, Aug 19, 2006 20:20
Antworten mit Zitat
Benutzer-Profile anzeigen
also wo willst du das den schon haben?
Im menu schon?
also ich habs jetz mal bei game_main drin:

Code: [AUSKLAPPEN]
Function GameMain()

Local temp_state = game_state
Local x = GraphicsWidth()/2
Local y = GraphicsHeight()/2
Local h = 0


FlushMouse()
FlushKeys()

Repeat
ClsColor 200,200,200
Cls

mX = MouseX() ;<-------------------------
mY = MouseY() ;<--------------------------
h = (h+1) Mod 360

Color 0,0,255
Text x+Sin(h)*50,y-Cos(h)*100,"Main game! ESC for menu, SPC for pause",1,1


If KeyHit(57)
   game_state = game_pause
EndIf


If KeyHit(1)
   game_state = game_menu
EndIf


DrawImage maus,mX,mY ;<--------------------------------------------------------
Flip
Until game_state<>temp_state

End Function

kamehan

BeitragSa, Aug 19, 2006 20:34
Antworten mit Zitat
Benutzer-Profile anzeigen
naja in game_main nutzt es nicht viel da ich immer noch im menu starte und dort erstmal zum maingame kommen muß, hab diese codes also erstmal in game_menu eingefügt, gestartet und "memory access violation" ...
wenn ich im windowed modus starte und auf start gehe (maingame) kommt ebenfalls dieser fehler, sofern ich den code bei maingame eingefügt habe

Schranz0r

BeitragSa, Aug 19, 2006 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
So ich habs:


Neue datei:

mauscursor.bb:

Code: [AUSKLAPPEN]
Function Mauscursor()
  mX = MouseX()
  mY = MouseY()
   DrawImage cursor,mX,mY
End Function


Speichern!!!

So nun die Main.bb öffnen

bei den includes das rein:

Code: [AUSKLAPPEN]
Include "includes/mauscursor.bb"


Bei "Global state" solltest du noch was eintragen:

Code: [AUSKLAPPEN]
Graphics 1024,768,32,2
HidePointer                                        ;<--------------------------das rein
SetBuffer BackBuffer()
SetFont(LoadFont("data\gfx\Fonts\Chinyen.ttf",30,1))
Global cursor = LoadImage("Data\GFX\cursor.bmp")  ;<--------------- das rein


dann speichern!!!

dann die game_menu.bb öffnen, und das eintragen:


Code: [AUSKLAPPEN]
.....
   If MouseHit(1)
      If RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,400,StringWidth("START"),StringHeight("START"))
         game_state = game_main
      ElseIf RectsOverlap(MouseX(),MouseY(),1,1,GraphicsWidth()/2,500,StringWidth("END"),StringHeight("END"))
         game_state = game_over
      EndIf
   EndIf
   
   Mauscursor()        ;<-------------------------DAS REIN!!!!!!!
   If KeyHit(1)
      End
   EndIf
     
Flip
Until game_state<>temp_state

End Function


Aus der load.bb den eintrag zum laden des cursors löschen!!!!!!


so gehts ^^

kamehan

BeitragSa, Aug 19, 2006 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
yeah astrein, endlich kanns weitergehen, DANKE!

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group