Probleme mit "TEXT" bei B+ ?!
Übersicht

![]() |
bmurrayBetreff: Probleme mit "TEXT" bei B+ ?! |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Gemeinde,
ich habe ein Problem bei meinem Fußballmanager. Ich glaube, dass es am für B+ langsamen Befehl "TEXT" liegt. Untenstehend mein Code, der folgendes macht: Aus einer Liste von Spielern kann man mittels Drag & Drop diese Spieler auf einem Fußballfeld auf deren jeweiligen Positionen ablegen, man kann Spieler auf den Position tauschen, die Spieler auf eine andere Position ziehen, wieder runter löschen, usw, kurz, alles was man bei Anstoss 3 auch konnte. Dazu kann man die taktische Formation aussuchen, alle Spieler auf dem Feld löschen, sowie dem Co-Trainer die Aufstellung überlassen. Die ersten acht Spieler aufs Feld zu ziehen funktioniert wunderbar, ab dem 9. Spieler klappt das aber nicht mehr so gut, man braucht mehrere Anläufe, bis das Programm den Spieler auf dem Feld ablegt. Auch die Schleife mittels rechter Maustaste verlassen ("Until MouseHit(2)"), funktioniert bei voller Aufstellung nur nach mehrmaligen Drücken. Ich glaube, dass das daran liegt, dass das Programm mit "TEXT" so viel zu tun, und man den richtigen Moment erwischen muss, bis das Programm die gewünscht Funktion macht. Die Texte als Image vorrendern wird wohl nicht gehen, da sie sich häufig ändern. So etwas wie SpeedText gibt es wohl nicht für B+?! Meine Frage nun: Habe ich das schlecht programmiert? Oder ist mein Programm auf B+ einfach nicht möglich, da ich viel "TEXT" verwende? Würde der Code so auf einer anderen Blitz-Plattform (eventuell mit speedtext o.ä.) besser laufen? Bin für jede Hilfe dankbar! Code: [AUSKLAPPEN] Function aufstellung()
;VORHERIGE SCHLEIFENEINSTELLUNGEN If wahlaufstellung>=6 Then welcheposfeld(5)="MIT" Else welcheposfeld(5)="ABW" If wahlaufstellung>=3 Then welcheposfeld(6)="MIT" Else welcheposfeld(6)="ABW" If wahlaufstellung=5 Or wahlaufstellung=7 Then welcheposfeld(9)="STU" Else welcheposfeld(9)="MIT" If wahlaufstellung=2 Or wahlaufstellung>=4 Then welcheposfeld(10)="STU" Else welcheposfeld(10)="MIT" Local abzug# auswahltaktik=1 Repeat DrawBlock hintergrund(1),0,0 DrawBlock hintergrund(6),20,100 ywert=447 mrz=MouseZSpeed() DrawImage sonstige(wahlaufstellung+7),20,100 For i = 1 To 7; FORMATION AUSWÄHLEN DrawImage sonstige(14+i),660,120+(i-1)*29 If MouseX()>=660 And MouseX()<713 And MouseY()>=120+(i-1)*29 And MouseY()<147+(i-1)*29 Then If MouseHit(1) Then wahlaufstellung=i If wahlaufstellung>=6 Then welcheposfeld(5)="MIT" Else welcheposfeld(5)="ABW" If wahlaufstellung>=3 Then welcheposfeld(6)="MIT" Else welcheposfeld(6)="ABW" If wahlaufstellung=5 Or wahlaufstellung=7 Then welcheposfeld(9)="STU" Else welcheposfeld(9)="MIT" If wahlaufstellung=2 Or wahlaufstellung>=4 Then welcheposfeld(10)="STU" Else welcheposfeld(10)="MIT" End If End If Next DrawImage sonstige(wahlaufstellung+21),660,120+(wahlaufstellung-1)*29 For i = 1 To 2; BUTTONS: TEAM LÖSCHEN + CO TRAINER DrawImage sonstige(29+i),675,323+(i-1)*29 If MouseX()>=675 And MouseX()<713 And MouseY()>=323+(i-1)*29 And ;ABKÜR If MouseHit(1) Then loeco=i End If Next If mrz > 0 Then mausrad = mausrad - 1; SPIELERLISTE SCROLLEN If mrz < 0 Then mausrad = mausrad + 1 If mausrad < 1 Then mausrad = 1 If mausrad > spieleranzahlmannschaft(teamspieler)-19 Then mausrad = spieleranzahlmannschaft(teamspieler)-19 SetFont schrift1 For q=mausrad To mausrad+19;SPIELER EINZEICHNEN & AUSWÄHLEN Color 0,0,0 If MouseX()>=20 And MouseX()<=600 And MouseY()>=ywert+(q-(mausrad-1))*15 And ;ABK If MouseDown(1)=0 Then Color 56,26,230 If MouseHit(1) Then aktbew$=nachname(teamspieler,q):aktbewpos$=position(teamspieler,q) aktsta=staerke(teamspieler,q):aktnum=nummer(teamspieler,q) abstandx=67:abstandy=16 For i = 1 To 11; HIERMIT KANN MAN IN DER SPIELERLISTE DURCH MAUSKLICK ; EINEN AUF DEM FELD BEFINDLICHEN SPIELER AUS DER AUFSTELLING LÖSCHEN If aktnum=spielernummerfeld(i) Then spielerfeld(i)=0 Next End If End If SetFont schrift1 For i = 1 To 11; AUF DEM FELD BEFINDLICHE SPIELER WERDEN IN DER SPIELERLISTE FETT GEZEICHNET If nummer(teamspieler,q)=spielernummerfeld(i) Then SetFont schrift4 Next Text 20,ywert+(q-(mausrad-1))*15,nummer(teamspieler,q) Text 50,ywert+(q-(mausrad-1))*15,vorname(teamspieler,q)+nachname(teamspieler,q) Text 240,ywert+(q-(mausrad-1))*15,position(teamspieler,q) DrawImage flagge(nationalitaet(teamspieler,q)),285,ywert+(q-(mausrad-1))*15 Text 320,ywert+(q-(mausrad-1))*15,alter(teamspieler,q) DrawImage sonstige(talent(teamspieler,q)),350,ywert+(q-(mausrad-1))*15 Text 450,ywert+(q-(mausrad-1))*15,kondition(teamspieler,q) Text 490,ywert+(q-(mausrad-1))*15,frische(teamspieler,q) Text 530,ywert+(q-(mausrad-1))*15,motivation(teamspieler,q) Text 580,ywert+(q-(mausrad-1))*15,staerke(teamspieler,q) Next SetFont schrift4 Color 0,0,0 For i=1 To 11;WENN AUS DEM FELD EIN SPIELER AUSGEWÄHLT WIRD If MouseX()>=koorfeldx(wahlaufstellung,i) And MouseX();ABK If MouseHit(1) Then aktbew$=spielernamefeld(i):aktbewpos$=spielerposfeld(i) spielerfeld(i)=0:aktnum=spielernummerfeld(i) aktsta=spielerstaerkefeld(i):aktfeld=i abstandx=MouseX()-koorfeldx(wahlaufstellung,i):abstandy=MouseY()-koorfeldy(wahlaufstellung,i) End If End If Next tempdoppelt=0; TEMP. EINSTELLUNGEN tauschname$="" tauschpos$="" tauschnum=0 tauschsta=0 If Not aktbew="" Then;EIN SPIELER WIRD IM FELD ABGELEGT For i = 1 To 11 If MouseX()>=koorfeldx(wahlaufstellung,i) And MouseX();ABK If MouseDown(1)=0 Then If tempdoppelt=0 Then If spielerfeld(i)=1 Then tempdoppelt=1 tauschname=spielernamefeld(i) tauschpos=spielerposfeld(i) tauschnum=spielernummerfeld(i) tauschsta=spielerstaerkefeld(i) End If End If spielerfeld(i)=1:spielernamefeld(i)=aktbew:spielerposfeld(i)=aktbewpos spielernummerfeld(i)=aktnum:spielerstaerkefeld(i)=aktsta For j= 1 To 11; SPIELER DARF NICHT DOPPELT AUF DEM FELD SEIN If Not i=j Then If spielernummerfeld(i)=spielernummerfeld(j) Then spielerfeld(j)=0 End If Next End If End If Next End If If tempdoppelt = 1 Then; ZWEI SPIELER WURDEN AUF DEM FELD GETAUSCHT spielerfeld(aktfeld)=1:spielernamefeld(aktfeld)=tauschname:spielerposfeld(aktfeld)=tauschpos spielernummerfeld(aktfeld)=tauschnum:spielerstaerkefeld(aktfeld)=tauschsta End If For i = 1 To 11 ;DIE SPIELER WERDEN INS FELD GEZEICHNET If spielerfeld(i)=1 Then DrawImage sonstige(29),koorfeldx(wahlaufstellung,i),koorfeldy(wahlaufstellung,i) Text koorfeldx(wahlaufstellung,i)+2,koorfeldy(wahlaufstellung,i)-1, spielernamefeld(i) abzug=1:temp=1; DIE STÄRKE EINES SPIELERS ÄNDERT SICH, WENN ER AUF EINER FALSCHEN POSITION ABGELEGT WURDE If i > 1 And spielerposfeld(i) <> welcheposfeld(i) Then abzug=0.8 : temp=2 If i = 1 And spielerposfeld(1) <> "TW" Then abzug=0.4 : temp=2 If i > 1 And spielerposfeld(i) = "TW" Then abzug=0.4 : temp=2 If temp=2 Then Color 255,0,0 Else Color 0,0,0;WENN EINE POSITION NICHT STIMMT, DANN WIRD STÄRKE UND POSITION ROT GEZEICHNET Text koorfeldx(wahlaufstellung,i)+92,koorfeldy(wahlaufstellung,i)+14, spielerposfeld(i) Text koorfeldx(wahlaufstellung,i)+2,koorfeldy(wahlaufstellung,i)+14, Int (spielerstaerkefeld(i)*abzug) Color 0,0,0 If welcheposfeld(i)="TW" Then tempoff#=0.05:tempdef#=0.95; BEITRAG EINES SPIELERS ZUR OFFENSIV/DEFENSIVSTÄRKE If welcheposfeld(i)="ABW" Then tempoff#=0.1:tempdef#=0.9 If welcheposfeld(i)="MIT" Then tempoff#=0.5:tempdef#=0.5 If welcheposfeld(i)="STU" Then tempoff#=0.9:tempdef#=0.1 offensivstaerkefeld(teamspieler,i)= Int (spielerstaerkefeld(i)*abzug)*tempoff*taktikwertoff(auswahltaktik) defensivstaerkefeld(teamspieler,i)= Int (spielerstaerkefeld(i)*abzug)*tempdef*taktikwertdef(auswahltaktik) End If Next If MouseDown(1)=1 Then; ANZEIGE DER AUSWAHL DES SPIELERS VOM GAMER If Not aktbew="" Then DrawImage sonstige(29),MouseX()-abstandx,MouseY()-abstandy Text MouseX()-(abstandx-2),MouseY()-(abstandy+1),aktbew Text MouseX()-(abstandx-92),MouseY()-(abstandy-14),aktbewpos If Not aktbew="" Then Text MouseX()-(abstandx-2),MouseY()-(abstandy-14),aktsta Else aktbew="":aktbewpos="":aktnum=0:aktfeld=0 EndIf If loeco=1 Then; AUFSTELLUNG LÖSCHEN For i = 1 To 11 spielerfeld(i)=0 Next auswahltaktik=auswahltaktik+1 loeco=0 End If For i = 1 To 11; ATTRIBUTE ALLER LEEREN POSITIONEN AUF DEM FELD LÖSCHEN If spielerfeld(i)=0 Then spielernamefeld(i)="":spielerposfeld(i)="":spielernummerfeld(i)=0 offensivstaerkefeld(teamspieler,i)=0:defensivstaerkefeld(teamspieler,i)=0 Next Select wahlaufstellung; DIVISIORAUSWAHL FÜR TAKTISCHE FORMATION Case 1 tempdivoff#=3.45:tempdivdef#=7.55 Case 2 tempdivoff#=3.85:tempdivdef#=7.15 Case 3 tempdivoff#=3.85:tempdivdef#=7.15 Case 4 tempdivoff#=4.25:tempdivdef#=6.75 Case 5 tempdivoff#=4.65:tempdivdef#=6.35 Case 6 tempdivoff#=4.65:tempdivdef#=6.35 Case 7 tempdivoff#=5.05:tempdivdef#=5.95 End Select offensivstaerke(teamspieler)=0; BERECHNUNG DER OFFENSIV- UND DEFENSIVSTÄRKE DES TEAMS defensivstaerke(teamspieler)=0 For i = 1 To 11 offensivstaerke(teamspieler)=offensivstaerke(teamspieler)+offensivstaerkefeld(teamspieler,i) defensivstaerke(teamspieler)=defensivstaerke(teamspieler)+defensivstaerkefeld(teamspieler,i) Next offensivstaerke(teamspieler)=offensivstaerke(teamspieler)/tempdivoff defensivstaerke(teamspieler)=defensivstaerke(teamspieler)/tempdivdef DrawImage sonstige(32),800,120; ANZEIGE DEROFFENSIV- UND DEFENSIVSTÄRKE DES TEAMS DrawImage sonstige(33),900,120 SetFont schrift3 Text 840,170,offensivstaerke(teamspieler) Text 940,170,defensivstaerke(teamspieler) If MouseDown(1)=0 Then FlushMouse DrawImage maus,MouseX(),MouseY() WaitTimer timercpu Flip Until MouseHit(2) End Function |
||
![]() |
Addi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich glaube eher, dass das daran liegt, dass du MouseHit() mehrmals hintereinander aufrufst ohne den Buffer zu leeren.
Probiere mal aus MouseHit() zwischen zu speichern und dann über die Variable zu gehen. |
||
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62 |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie Addi schon sagte, wird es an der Mausbutton Abfrage liegen - denn B+ schaut in den Puffer und löscht ihn danach.
Man könnte den ganzen Code in jedem Fall hübscher machen: - Konstanten benutzen: Die ganzen magischen, losen Zahlen da drin sagen ausschließlich dir was und sind zudem schlecht zu warten. Auch diese String Abfragen können bei genügender Anzahl deutlich langsamer sein als Zahlen - und sind wiederum Fehleranfällig. - Lass den Unsinn, mit Doppelpunkt mehrere Befehle in eine Zeile zu quetschen - dafür gibt es keinen guten Grund, du machst es dir nur künstlich schwerer. - Ziehe Types vor, wenn es Sinn macht. Spielername, nummer usw. sind in einem Objekt viel besser aufgehoben. - Den Code einfach so runter zu tippen geht zum testen in Ordung, aber spätestens jetzt solltest du das alles in Funktionen abkapseln. |
||
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) |
![]() |
bmurray |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für die Tipps, dann werde ich den Code mal dahingehend umschreiben. Bezüglich den Spielerattributen dachte ich, dass DIM-Arrays besser sind, weil die Anzahl ja relativ konstant bleibt (Jedes Team mit maximal 30 Spielern). Da man Types, so wie ich das bisher verstanden hab, nicht direkt ansprechen kann (also nur mit NEXT, LAST, BEFORE, etc.) schien mir das auch der bessere Weg zu sein. | ||
![]() |
Lobby |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann auch ein Array aus Type-Objekten machen. Das könnte dann zum Beispiel so aussehen. BlitzBasic: [AUSKLAPPEN] Dim players.TPlayer(10) Und schon hat man die Informationen über Spieler schön gekapselt. |
||
![]() |
bmurray |
![]() Antworten mit Zitat ![]() |
---|---|---|
Types... Ich glaube, so langsam verstehe ich das. Ich habe deinen Code jetzt mal für mein Programm übersetzt:
Code: [AUSKLAPPEN] Dim players.Tplayer(18,35)
For i = 1 To 18 Local dateispielerteam$,dateihandlespielerteam% dateispielerteam="data\spieler\ger"+i+".txt" dateihandlespielerteam=ReadFile(dateispielerteam) For j = 1 To 35 player.Tplayer = New Tplayer player\vorname$ = ReadLine(dateihandlespielerteam) player\nachname$ = ReadLine(dateihandlespielerteam) player\position$ = ReadLine(dateihandlespielerteam) player\nummer = ReadLine(dateihandlespielerteam) player\staerke = ReadLine(dateihandlespielerteam) player\talent = ReadLine(dateihandlespielerteam) player\alter = ReadLine(dateihandlespielerteam) player\nationalitaet = ReadLine(dateihandlespielerteam) players(i,j) = player Next Next CloseFile dateihandlespielerteam ;Spieler von Team 1 anzeigen: i=1 For j = 1 To 35 player.TPlayer = players(i,j) Print player\vorname+player\nachname Next Type Tplayer Field vorname$ Field nachname$ Field position$ Field nummer% Field staerke% Field talent% Field alter% Field nationalitaet% Field motivation% Field kondition% Field frische% Field gehalt% Field vertragsdauer% End Type Zitat: players(i,j) = player Genau damit kann ich nun die Spieler ansprechen?! Das war mein Problem bisher, warum ich Types ausgewichen bin.
|
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group