Positionsangaben Cirka-Angaben möglich?
Übersicht

![]() |
SereyanneBetreff: Positionsangaben Cirka-Angaben möglich? |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich würde es gerne in mein Spiel aufnehmen, dass man Gebäude betreten und Personen ansprechen kann. Ist ja eigentlich nicht schwer, so nach dem Motto: If Player_pos_x=neben der Figur/dem Gebäude then soundso... Aber: wer kennt ein Spiel, wo man exakt auf X=200 und y=230 stehen muss um eine Person anlabern zu können??? Natürlich kann man bei 2D Personen von 4 Seiten anlabern, und auch nicht von einer exakten Position aus. Der Code sollte etwa so aussehen: If Player_pos_x=zwischen 200 und 205 wie geht das? Freue mich auf hilfreiche Antworten. Danke im Voraus! |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
> und < sind hier die benötigten Operatoren. Btw: Je nachdem wie die Karte deines Games aufgebaut ist (tiles ?) ist es durchaus üblich fixe werte anzunehmen ![]() |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
aaaaah danke mist da hätte ich auch selber drauf kommen können.... ![]() |
||
![]() |
AmateurBB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: If Player_pos_x=zwischen 200 und 205
Ich würde sagen: Code: [AUSKLAPPEN] if Player_pos_x > 199 and Player_pos_x < 206 then
![]() ...wieder einmal eine Antwort, die 1 Minute zu spät kam... |
||
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/ |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Ich würde sagen: Code: [AUSKLAPPEN] if Player_pos_x > 199 and Player_pos_x < 206 then
![]() ...wieder einmal eine Antwort, die 1 Minute zu spät kam... trotzdem danke! ich weiß eh noch nicht, wie ich das hinkriege... if Player_pos_x > 199 and Player_pos_x < 206 then sprungmarke oder gosub sprungmarke oder wie geht das? und wo setz ich die sprungmarke hin? in die funktion oder außerhalb? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde auf Sprungmarken gänzlich verzichten und alles in Funktionen kapseln.
Und wenn Du es gleich richtig machen willst schreibst Du dir eine Funktion die externe Files einliesst und parst und somit für alle Gespräche verwendbar ist. Sowas alles direkt in den Code zu schreiben ist Selbstmord. Allerdings muss ich anmerken dass ich glaube dass Du dafür noch nicht erfahren genug bist - vielleicht solltest Du erstmal ein paar kleiner Projekte hinter dich bringen um mit den Basics vertraut und sicher zu werden. Die Art deiner Fragen lässt erkennen dass Du viele grundlegende Mechanismen noch nicht wirklich verinnerlicht hast. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Herzlichen Dank für deine Antworten und deine Aufmerksamkeit ![]() Ich habe vor Jahren mal an einem (damals noch teuren) Vtech Basic angefangen. Nur Grafik gabs da noch nicht, daher sind mir viele Befehle logischerweise fremd. Meine Frage mit der sprungmarke basiert daher, dass ich nicht eine ganze Seite Code einfügen will, nur wenn man bsp. ein Gebäude betritt. Deshalb wollte ich das auslagern in eine Sprungmarke, die nicht mitten im restlichen Code steht. Deine Idee mit dem externen File ist da natürlich prima. Werde mich mal drum kümmern. ![]() |
||
Dreamora |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Dafür sind Funktionen eigentlich explizit da, dass man funktionalität die immer wieder gebraucht wird an einfache "namen" bindet zum nutzen.
Gosub - Return kann man auch noch brauchen, wird jedoch schwerer zum debuggen. Aber goto ist effektiv nur als ersatz für exit oder multi-loop exit / continue wirklich zu gebrauchen sonst gibts code der schwer bis garnicht mehr zu verstehen ist. |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
sorry jetzt muss ich doch nochmal doof fragen. habe in einem tutorial den befehl include gefunden. was muss ich im include-file reinschreiben? (also im hauptprogramm include "datei.bb")
momentan sieht die include datei zum testen so aus: If KeyDown (200) And p_x=250 And p_y=290 Then ClsColor 29, 88, 15 Delay 1000 End wie gesagt nur zum testen. funzt nur nicht. wer kann mir sagen warum nich? |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Include die Datei in deinem Code dort, wo das hinkommen soll. | ||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Include die Datei in deinem Code dort, wo das hinkommen soll.
also If KeyDown(200) And 280<pos_x<300 And 240<pos_y<260 Then include datei? warum geht das nicht: If KeyDown(200) And 280<pos_x<300 And 240<pos_y<260 Then Print "toll" egal wo ich stehe, sobald ich hoch drücke kommt "toll". soll es doch gar nicht... |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code: [AUSKLAPPEN] If KeyDown(200) And 280<pos_x<300 And 240<pos_y<260 Then Print "toll"
-> Code: [AUSKLAPPEN] if keydown(200) and (pos_x > 279) and (pos_x<300) and ...
immer nur ein Vergleich pro operation, mehr ist nicht. ql:include setzt anstelle des Befehles den Inhalt der inkludierten Datei. Und das war definitiv nicht was ich mit "externe Dateien parsen" meinte. |
||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Und das war definitiv nicht was ich mit "externe Dateien parsen" meinte.
oh sorry. was meintest du dann? hab davon noch nie was gehört. und nochmals vielen dank dass du dir die zeit nimmst! ich melde mich am Freitag wieder! |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du machst eine *.txt oder *.whatever-Datei und liest diese dann per ql:ReadFile , ql:ReadLine , ql:CloseFile ein, in der Datei steht dann ein Dialog von einem NPC. Du könntest für jeden NPC z.B. ne Eigene Datei machen, oder du könntest eine "Dialog-Datenbank"-Datei machen, in welcher du alle Dialoge hast und dann zum Entsprechenden Dialog hüpfst wenn er vom Spiel benötigt wird.
MfG |
||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke. ist aber für das betreten von gebäuden nicht zu gebrauchen, oder?
(jetzt meld ich mich ja doch schon vor freitag wieder ![]() |
||
![]() |
skey-z |
![]() Antworten mit Zitat ![]() |
---|---|---|
du hast bisher noch nicht geschrieben, ob es sich um 2D oder 3D handelt, in 3D kannst du einfach Entitydistance nutzen, für 3D würde ich mir eine Funktion schreiben, die prüft, wie weit die beiden Objekte voneinander entfernt sind (mit Winkelfunktionen), dadurch müsstest du nur die beiden positionswerte übergeben und hast die Entfernung als Rückgabewert.
[Edit]Oh sorry, habe gerade noch mal deinen ersten Beitrag gelesen und da erwähnst du ja, dass es sich zumindest um 2D Personen handelt. |
||
Awards:
Coffee's Monatswettbewerb Feb. 08: 1. Platz BAC#57: 2. Platz |
- Zuletzt bearbeitet von skey-z am Mi, März 12, 2008 22:06, insgesamt einmal bearbeitet
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sereyanne, mache dir ein eigenes Mapformat. Mache das ganze mit Tiles in einem Array, ist so viel leichter. | ||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmmm.... Mapformat? Hab mir nen mapeditor runtergeladen... nur blitz 2d demo liest das glaub ich nich... und davon gibts ja keine vollversion mehr, und 3d hol ich mir erst wenn ich mit 2d klarkomme
Zitat: in 3D kannst du einfach Entitydistance nutzen, für 3D würde ich mir eine Funktion schreiben, die prüft, wie weit die beiden Objekte voneinander entfernt sind
hast du dich verschrieben? du sagst beidemale was von 3d... |
||
![]() |
Sereyanne |
![]() Antworten mit Zitat ![]() |
---|---|---|
@BladeRunner
Jetzt muss ich doch nochmal fragen, wie ich den Code zum Laufen von dir in eine Funktion verpacke. Ich krieg das einfach nicht hin und hab dadurch Probleme mit dem Bildschirmwechsel. Mein Programm sieht so aus: Code: [AUSKLAPPEN] Graphics 640, 480, 32, 3
SetBuffer BackBuffer() ClsColor 29, 88, 15 ;dunkelgrün ;an der Stelle werden die Grafiken geladen Global Magier = LoadAnimImage ("Magier5.bmp",32,32,0,12) MaskImage Magier, 255, 0, 255 Global movetimer = MilliSecs() Global Score = 0, Lives = -1 Const HOCH = 9, RUNTER = 3, LINKS = 6, RECHTS = 0 Global p_x=290 Global p_y=250 Dim map (20,15) ;Hauptschleife Repeat ;Die Anzahl der Leben abfragen. If Lives = -1 Then Cls Text 100, 100, "Press F1 to Play" If KeyHit (59) Then Lives = 3 score = 0 EndIf ElseIf Lives > -1 Then Cls If Start = 0 Then ;Um die Leveldaten neu einzulesen, habe ich eine neue Function erstellt Start = 1 ;Diese kann man später erweitern um mehrere Level zu erstellen. SetupLevel() EndIf ;INPUT - hier kommt dein Code moving = False ;steht denn der alte holzmichel noch, ja der steht noch... If KeyDown(200) Then p_y=p_y-1 richtung = HOCH moving = True ;jetzt lööft er EndIf If map((p_x +16) /32,p_y /32)=0 Then p_y = p_y -4 If p_y =< 0 Then p_y = 1 EndIf Color 0,0,0 If KeyDown(200) And p_x>280 And p_x<300 And p_y>240 And p_y<260 Then Cls Delay 2000; nur zum testen ob es überhaupt geht! ich möchte einen bildschirmwechsel ins innere des hauses erreichen EndIf If KeyDown(208) Then p_y=p_y+1 richtung = RUNTER moving = True ;jetzt lööft er EndIf If map((p_x +16) /32,(p_y +32) /32)=0 Then p_y = p_y +4 If p_y => 448 Then p_y = 447 EndIf usw. ;ANIMATIONSLOGIK ;unverändert ;BEWEGUNG ;unverändert EndIf Color 128,128,128 Rect 292,255,21,224,1 ;OUTPUT DrawImage Magier, p_x,p_y,richtung+frame DrawMap() ;Karte malen DrawTut() Collision() DrawPoints() EndIf Flip ;Bildschirm tauschen Cls Until KeyHit (1) End |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lade NIEMALS die Blitz2D Demo runter. Blitz3D kann genauso viel wie Blitz2D und ist weniger verbuggt.
Zum Mapformat solltest du etwas eigeninitiative Zeigen. Huuch, es gibt keinen Befehl MakeGame(), nun muss man doch ein Spiel machen! Normalerweise programmiert man sich selber einen Mapeditor und speichert die Daten der Map dann in ein File. Wenn du ein RPG programmeiren willst solltest du mal die RPG-Tutorials auf Robsite lesen, auch wenn ich sie wegen der fehlenden Formatierung und der Hauptschulrechtschreibung verabscheue, sind sie schon relativ toll für noobs. |
||
- Zuletzt bearbeitet von The_Nici am Fr, März 14, 2008 19:35, insgesamt 2-mal bearbeitet
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group