2D-Weltraum & Cursor erschaffen
Übersicht

![]() |
kamehanBetreff: 2D-Weltraum & Cursor erschaffen |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ah cool damit läßt sich sicher was anfangen..danke! | ||
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Siehe onlinehilfe mom.
http://www.blitzbase.de/befehle2d/dim.htm Wer sucht, der findet ![]() Wenn du was schönes gebaut hast, sag uns bescheid ![]() Grüße Franz |
||
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahh der dim-mist xD
na gut, das muß man erstmal wissen ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! ![]() 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 ![]() |
||
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Poste doch mal deinen aktuellen Code ins Forum, dann können wir dir besser Helfen ![]() 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 ![]() BlitzBasic: [AUSKLAPPEN]
|
||
![]() |
kamehan |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() |
Schranz0r |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
yeah astrein, endlich kanns weitergehen, DANKE! | ||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group