array mit einträgen eines anderen array vergleichen

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

x_to

Betreff: array mit einträgen eines anderen array vergleichen

BeitragSo, Apr 05, 2015 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
ich sitze seit tagen vor dem problem und bekomme das nicht hin:
ich erkläre mal was ich machen will:

ich habe ein bild im buffer;
das wird auf ein zweites kopiert;
jetzt will ich über das zweite bild eien tilemap zeichnen und dabei soll anhand eines anderen arrays entschieden werden, ob ein tile transparent oder solid gezeichnet wird.
feld() enthält alle die werte die verglichen werden sollen mit buffer_index(), kommt es zur übereinstimmung, soll das tile mit index aus changed_index() eigentlich transparent gezeichnet werden, ansonsten solid.
Allerdings wird alles nur solid gezeichnet....worin liegt der fehler ??
ich kann auch gern den kompletten source posten....oder jemanden zuschicken....wäre für jede hilfe dankbar.....
würde ich statt der schleife nur mit if verzweigungen arbeiten läuft es wunderbar....
das wäre aber verdammt viel arbeit...Sad

Code: [AUSKLAPPEN]
layer_2=CreateImage (4096,4096)
SetBuffer ImageBuffer (layer_2)
i=0
DrawImage  layer_1,0,0
For y= 0 To 255
   For x = 0 To 255
   a=changed_index(i)
   
            For b = 0 To 3
         
               If buffer_index(i)=feld(b)
                  MaskImage tile(a),red,green,blue
                  DrawImage tile(a),x*16,y*16
               Else
                  DrawBlock tile(a),x*16,y*16
               EndIf
            Next
         
            
   
   i=i+1
   
   Next   
   
   
Next


SaveBuffer (ImageBuffer(layer_2),CurrentDir$()+"layer_2.bmp")

Xeres

Moderator

BeitragSo, Apr 05, 2015 21:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Willkommen.
Als erstes finde ich es schon mal fraglich, alle Tiles in ein Bild zeichnen zu wollen: Gibt dafür gute Gründe, oder ist das ein Fall von verfrühter Optimierung, weil du glaubst, dass das schneller ist, als einzelne Bilder zu zeichnen?
Zweitens sind die Variablennamen nicht sehr deutlich: x,y gehen von mir aus noch durch, i wird schon leicht undeutlich - was wird das durchgezählt und dann prüft du was gegen b und weist danach aber was mit a zu. Da sieht man nicht durch und ich könnte nur raten, was sich dahinter verbirgt.
Ansonsten fände ich interessant, wie du changed_index, buffer_index und feld mit Werten befüllst.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

x_to

BeitragSo, Apr 05, 2015 23:02
Antworten mit Zitat
Benutzer-Profile anzeigen
im grunde suchen ich eigentlich nur einen einfachen algorithmus um einträge eines eindimensionalem array mit einem anderen zu vergleichen....

ich nutze BB um gamemaps für die HOL zu erstellen und bin momentan an dem spiel Globdule....da kommt es auf zeit überhaupt nicht drauf an...Smile

Xeres

Moderator

BeitragMo, Apr 06, 2015 2:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist die Abfrage denn überhaupt nötig?
Falls ja: Sind die Werte in irgendeiner Form sortiert - oder sortierbar?
Wenn diese Optimierung nicht nötig ist: Zeichne einzelne Tiles und spare die Entwicklungszeit, die wo anders besser investiert ist.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

SpionAtom

BeitragMo, Apr 06, 2015 3:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Hej, ich verstehe deine Beweggründe auch nichgt so ganz. Der Fehler liegt vermutlich in deiner For-Schleife.
In einem deiner vier Durchläufe mag der If-Zweig greifen, in den anderen Läufen läuft dann wohl immer der Else-Zweig. Es ist also egal, ob du einmal maskiert zeichnest.

Vielleicht hilft es die Schleife von dem Zeichnen zu trennen:
Code: [AUSKLAPPEN]
            foundForMask = False
         For b = 0 To 3
               If buffer_index(i)=feld(b) Then
             foundForMask = True
             Exit
               EndIf
            Next
         If foundForMask Then
                MaskImage tile(a),red,green,blue
                DrawImage tile(a),x*16,y*16
            Else
                DrawBlock tile(a),x*16,y*16
            EndIf
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
 

x_to

BeitragMo, Apr 06, 2015 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
@SpionAtom....das war es...genau jetzt läuft es so wie es soll...Smile

Vielen vielen Dank...... Very Happy

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group