[Multithread] Allgemeine Fragen zu Allem
Übersicht

![]() |
GearTechDEehemals 'KillerJo96'Betreff: [Multithread] Allgemeine Fragen zu Allem |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe diesen Thread mit Absicht Multithread genannt, da ich neu in Sachen wie Types bin. Da ich sie derzeitig lerne und kleine Projekte damit anfange, habe ich einige Fragen. Da ich weiß, dass es nicht nur eine Frage ist, habe ich den Thread, Multithread genannt. Ich hoffe das ist in Ordnung, sonst kann der Thread gerne von einem Moderator umbenannt werden! Nun zu meinem 1. Problem. Ich bin derzeitig an einem Minecraft 2D Projekt am arbeiten. Ich bin noch ziemlich am Anfang aber schon ziemlich weit, für meine Programmierfähigkeit gekommen(finde ich). Trotzdem brauche ich jetzt mal Hilfe. Ich habe einen Type mit dem Namen: Block_Grass und einen Type mit dem Namen: Block_Erde. Diese Blöcke haben jeweil folgende Felder: PosX#, PosY# und BlockImg mit dem Pfad zur entsprechenden Textur des Blockes. Die Eigenschaften bekommen ihren Wert in der Funktion Create_Grass_Block bzw. Create_Erde_Block zugewiesen. Jeder Block hat eine Größe von 16x16 Pixeln. Jetzt habe ich noch einen Player erstellt mit einem Bild und Abmessungen von 16x32 Pixeln. Somit ist der Spieler genauso groß wie 2 Blöcke die genau untereinander liegen. ![]() Mit der Taste "1" (Grass) oder "2" (Erde) lasse ich die entsprechenden Blöcke genau unter meinem Player erstellen. Da gibts weiterhin auch keine Probleme. Jedoch möchte ich, dass wenn ich mit dem Player genau unter dem Block bin den ich zuvor erstellt habe und mir der nich gefällt das ich den löschen kann. Also den einzelnen Block. Mit Delete grass.Block_Grass lösche ich leider alle. Wie kann ich einzelne löschen und dann auch noch genau den, der unter meinem Player liegt? Ich hoffe, dass das nicht zu viel Arbeit ist, denn es ist ein Projekt, welches klein, förmlich und übersichtlich bleiben soll. Leider kann ich weder noch ![]() Ich hoffe mir kann jemand helfen ![]() |
||
Mit freundlichen Grüßen: GearTechDE |
- Zuletzt bearbeitet von GearTechDE am Mi, Sep 28, 2011 18:26, insgesamt einmal bearbeitet
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was hat das mit Threads oder Multithread zu tun? Du kannst problemlos mehrere Fragen in einem Foren-Thread stellen.
Topic: Delete grass löscht das Objekt, das gerade in grass verlinkt ist. Am besten hast du ein Array in dem alle Blöcke sind, damit du über die Spielerposition daran kommst und den richtigen block löschst. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, ein Array also... ![]() Okey ich werd mal etwas damit rumprobieren und wenn ich nicht weiter komme, melde ich mich wieder ^^ Vielen Dank Edit: Hab etwas probiert, hat jedoch nich geklappt. Könntest du mir büdde, büdde ein kleines Beispiel posten. Ich wäre dir echt dankbar ![]() |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein paar Tipps:
- Block_Grass & Block_Erde sind unpraktisch, weil beides gleichzeitig nicht in ein Array passt, benutze lieber einen allgemeinen TBlock Type (und unterscheide die per Nummer/ID/Frame). - Dim Karte.TBlock(X,Y) - Das neue Array ist leer, was bei Types bedeutet, es voll mit dem NULL ![]() - Außer das du mit Types arbeitest, ist es eine normale Tilemap. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja also ein Array mach ich mit Dim usw. aber ich komm gerade nicht auf die Palme wie ich es machen könnte, Types und Arrays miteinander zu kombinieren. Ich möchte ja nur einzelne Blocks löschen. Kann es sein dass ich jeden Block die Koordinate X und Y in das Array eintragen muss? Aber wie kann ich dann nachher das wieder löschen. Ich weiß überhaupt nicht wie ich das anstellen soll...
Gibt es vielleicht Code Beispiele oder etwas ähnliches in dem ich sowas lernen könnte, oder kannst du mir ein Array Tutorial geben? Ich kenn mich damit nicht so gut aus |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Position eines Blocks ist durch seine Position im Array festgelegt. Wenn du einen Block löschen willst, reicht ein Code: [AUSKLAPPEN] Delete Map(x, y)
Hier mal ne kleine Spielerei: BlitzBasic: [AUSKLAPPEN] Graphics(512,512,0,2) Edit: Kleine Verbesserung. Edit2: Nochmal + Kommentare |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
- Zuletzt bearbeitet von Xeres am So, Sep 25, 2011 21:51, insgesamt einmal bearbeitet
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Oh man, dass ist mir alles zu kompliziert. Ich versteh das nicht ganz richtig. Ich suche mir glaub ich erstmal noch ein paar Tutorials zu Arrays und Types etc. Ich denke für so ein Projekt ist es trotzdem noch zu früh.
Trotzdem danke für die Bemühungen. |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die RPG-Tutorials sollten helfen, wenn ich mich recht entsinne... ansonsten frag nach. | ||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke werde mich mal ins zeug legen ... | ||
Mit freundlichen Grüßen: GearTechDE |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also ich würde es so machen:
Einen Type für einen Block anlegen, in dem Position und Typ gespeichert wird: BlitzBasic: [AUSKLAPPEN] Type TBLock xPos / yPos sollen nicht nur die Koordinate für das Bild angeben, sondern auch das Feld im Array, sodass hinterher schnellere Zugriffe möglich sind. Dazu brauchen wir aber erst ein Array, welches vom Typ "TBlock" sein soll, sodass für jede X und Y Position in dem Array ein "Tblock" exestieren kann. BlitzBasic: [AUSKLAPPEN] Dim Feld.TBLock( 64, 64 ) Jetzt musst du dir eins klar werden lassen: Ist eine Variable von irgendeinem Type "= Null", so exestiert dort kein Eintrag und es kann nicht auf die Variablen des Types zugegriffen werden. Ist die Variable allerdings "<> Null", so kann man auf die Variablen zugreifen und zusätzlich wird der Type in der For ![]() ![]() Das heißt: Ist ein Feld in dem Array "= Null", so exestiert dort auch kein Block, heißt also, wenn du mit Delete ![]() Somit kannst du auch ganz einfach Prüfen, ob den Spieler dahin gehen kann oder nicht, also BlitzBasic: [AUSKLAPPEN] If Feld( deine_x_position, deine_y_position ) <> Null Then [...] (Oder = Null) Anstatt also für die Komplette Map ein Array für nur eine Zahl anzulegen, legst du hier ein Array an für gleich mehrere Werte sogar von unterschiedlichen Typen (String / Interger / Float). Somit kannst du deine Blöcke nicht nur so abspeichern das man nur die Bilder auslesen kann, sondern auch z.B. wie lange der Block zum Abbauen braucht oder wie viele Items von was dieser Block nach dem Abbauen hergibt usw. mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okey ich werde das ganze nochmal etwas durch denken und daran rumprobieren.
Vielen Dank. Ich hoffe ich komme jetzt endlich mal damit klar.^^ Edit: 1. Problem: Wie kann ich denn überhaupt einen Block in das Array eintragen? Ich erstelle mit dem drücken einer "1" z.B. einen Grass Block. Aber wie kann ich das jetzt dort eintragen? Ich versteh irgendwie noch nicht wie man mit einem Array umgeht. |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Normal kannst du ja einem 2 Dimensionalem Array an einer beliebigen X/Y Koordinate einen Wert zu weisen, bsp:
BlitzBasic: [AUSKLAPPEN] Dim Array%( 16, 16 ) ;Integer Array auf 17*17 Felder Dimmen (Beachten!: 0 wird mitgezäht!) Wenn du einen Type erstellst, tust du dies so BlitzBasic: [AUSKLAPPEN] Local block.TBlock = New TBlock Wenn jetzt die Variable ein Array ist, musst du im prinziep nur die Indizes anhängen ( array( 5, 5 ) : BlitzBasic: [AUSKLAPPEN] Dim Array.TBlock( 16, 16 ) ;TBlock Array 17*17 mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ok aber das das Feld 5,5 war ist jetz von dir so bestimmt.. Aber wenn ich jetzt beispielsweise mit 1 nen Block erstelle. Vorher frage ich ja ab
BlitzBasic: [AUSKLAPPEN]
SOll ich dann in die Abfrage noch hinzufügen Array(5,5) = New Block_Grass ??? Was ist in dem Falle die 5,5 und wie kann ich jetzt wissen, auf welcher Koordinate mein Player steht um den Block zu löschen über dem ich stehe... Ich release hier mal den jetzigen source. Vielleicht kannst du mir anhand dessen ein wenig weiterhelfen. KLICK |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Position vom Spieler muss bekannt sein, schließlich musst du den irgendwo zeichnen, z.B. Px und Py (oder in einem Type... wenn dich das nicht zusätzlich verwirrt).
Die Tilemap hat eine Breite und Höhe und jedes Feld eine Koordinate die mit X & Y eindeutig angegeben werden kann. Ein Feld unter dem Spieler wäre dann Feld(Px, Py+1). Wenn deine Funktion nur Blöcke erstellen soll, muss sie einen zurück geben können: BlitzBasic: [AUSKLAPPEN] Type TBlock Das funktioniert genauso, wie bei den anderen Datentypen: Die Funktion muss auf $ enden um Strings zurück zu geben oder auf # für Kommazahlen. Für diesen Type eben .TBlock. Das in der Funktion erstelle Objekt linkst du zu der richtigen Position im Array: BlitzBasic: [AUSKLAPPEN] If KeyHit(2) Then Um jetzt alle Koordinaten in der Spielerumgebung benutzen zu können, braucht es etwas mathe - das ist aber völlig unabhängig vom erstellen und zuweisen der Types. |
||
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 THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okey, ich probiers so nochmal. Das ist aber für mich wirklich sehr kompliziert. Ich glaube ich verstehe langsam, warum ich UDP NIE lernen kann xD - zu blöd dafür.
Naja ich werds mal probieren. Danke für die Code Schnippsel Edit: So ich habe noch eine Frage zu TCP. Ich habe vorher immer mit Direct Play gearbeitet, bin damit auch gut zurecht gekommen, doch jetz wird es auch für mich langsam Zeit für schnellere Dinge. Ich fange darum jetzt an mit TCP. Voraus schon die Frage: Bei DP gibt es einen NetMsgType Befehl, welcher verschiedene "Channel" sag ich jetzt mal von 1-99 hat. "Channel" 100 und 101 sind jeweils für das joinen und deleten einen net players. So. Jetzt möchte ich z.B. mit TCP, X,Y und Z koordinate verschicken. wie mach ich das am besten? bei DP hab ich X für Channel 1 Y für Channel 2 und Z für channel 3 benutzt. Aber wie mach ich das mit TCP? Muss ich da die Koordinaten in einem String senden und dann den String in 3 teile parsen? sodass meine globale variable jeweils x,y und z die einzelnen werte zugeteilt kriegen? das ist erstmal meine erste fragen zu TCP... |
||
Mit freundlichen Grüßen: GearTechDE |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group