ImageMovement Funktion Variablen nicht Global Deklarieren
Übersicht

DunckiBetreff: ImageMovement Funktion Variablen nicht Global Deklarieren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
hier mal eine Frage an die die mehr erfahrung haben als ich. Ich habe mir mal ne Movementroutine für Images ausgedacht die im Prinzip auch schon funktioniert , was mich aber stört ist , das ich die Variablen Global deklarieren muß gibt es da auch eine andere Möglichkeit? Vor allen dingen möchte ich das Image was Ich entweder Lade oder wie in diesem Falle selber erzeuge, auch an die Funktion übergeben , nur dann bekam ich eine Fehler Meldung. Hier noch kurz die Parameter Erklärung, der erste Parameter soll den Image angeben, der Zweite ist der Move String: 0 = Pause 1 = oben 2 = rechts oben 3 = rechts 4 = rechts unten 5 = unten 6 = links unten 7 = links 8 = link oben 9 = oben die beiden nächten parameter geben die Steps in pixel an. und der letzte den aktuellen frame. Vielleicht hat ja jemad eine Idee Gruß Duncki Code: [AUSKLAPPEN] Global b,a,m$,stpx,stpy,dx,dy,imx,imy,fr,im,test Graphics 640,480,16,2 test=CreateImage(32,32) SetBuffer ImageBuffer(test) Color 255,128,64 Oval 2,2,14,14 GrabImage test,0,0 SetBuffer BackBuffer () While Not KeyDown(1) Cls ImageMove(test,"44444444444444444444666666666666666666668888888888888888888822222222222222222222",1,1,0) Flip Wend End Function ImageMove(test,m$,stpx,stpy,fr) b=Len(m$) If a<b Then a=a+1:Else a=1 Select Mid$(m$,a,1) Case 0 dx=0:dy=0 Case 1 dx=0: dy=-stpy Case 2 dx=stpx:dy=-stpy Case 3 dx=stpx:dy=0 Case 4 dx=stpx:dy=stpy Case 5 dx=0:dy=stpy Case 6 dx=-stpx:dy=stpy Case 7 dx=-stpx:dy=stpy Case 8 dx=-stpx:dy=-stpy End Select imx=imx+dx:imy=imy+dy DrawImage test,imx,imy,fr End Function |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also, bei mir Funzt es, mit B3D und B+!
keine ahnung, was du meinst! |
||
between angels and insects |
Duncki |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Jan_
hi , das das so funktioniert weiß ich. Ich hätte jetzt nur gerne gewußt ob es eine Möglichkeit gibt ohne das ich die Variablen global deklariere. Die Funktion muß sich ja folgendes merken die Aktuelle Position (imx,imy), Wo in dem MovementString er gerade ist , und das ist meine Frage ob es einen anderen Weg gibt . Was weiß ich über Poke oder so,wobei ich keinen PokeString$ Befehl gefunden. Wenn es dann nur so geht ist es auch nicht so schlimm , war nur mal so eine Idee. Duncki |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, jetzt, habe ich es Kapiert!
Nein, nich wirklich, wenn du end Function hast, gwehen alle DAten aus der Function verloren, du kannst natürlich mit Return Daten zur Überliegenden Function/Hauptprogramm zurückgeben! |
||
between angels and insects |
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du kannst einen extra Type mit den Daten, die vorher Global waren, anlegen.
Also: Code: [AUSKLAPPEN] Type ImageMove
Benutzung dann so:
Field b,a,m$,stpx,stpy,dx,dy,imx,imy,fr,im,test End Type Code: [AUSKLAPPEN] ; Einmal:
Natürlich müsste die ImageMove - Funktion selbst auch noch mal angepasst werden.
i.ImageMove = New ImageMove ; Beliebig oft: ImageMove(i,blabla... ) |
||
Ensign Joe |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
![]() Den gibts aber hier nicht (in BB) ![]() |
||
Duncki |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Erstmal Danke für den Tip mit den Types , muß ich mal ausprobieren.
@Ensign Joe Siehste war BB doch die falsche wahl 8) . Nein das ist schon OK ,aber da hätte Mark sich was einfallen lassen können. Weiß einer ob das die Konkurrenz könnte? PB , DBP? Oder kommt mir jetzt gleich jemand und sagt dann müße ich C++ lernen ![]() Gruß Duncki |
||
OJay |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
nunja, in c++ hättest du zumindest die möglichkeit, variablen direkt im speicher zu verändern...
aber generell ist die beste möglichkeit über ein type, wie oben bereits erwähnt... btw: eine peekstring funktion, kann man sich auch ganz einfach selbst schreiben ![]() Code: [AUSKLAPPEN] Function PeekString$(bank,numbytes) Local a$="" For pos=0 To numbytes-1 byte=PeekByte(bank,pos) If byte<>0 Then a$=a$+Chr$(byte) Next Return a$ End Function pokestring sollte dann wohl auch klar sein, oder? |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
mit Verlaub, das "richtige" (Ur-)BASIC hatte noch weitaus weniger Möglichkeiten als Blitz.
Und wer sich jemals mit Commodore BASIC 2.0 rumgeschlagen hat, weiß Blitz seeeeeehr zu schätzen. Aber back2topic: Alternativ zu einem Type empfehle ich die Rückgabe zu nutzen, also (stark vereinfachtes Pseudo-Bsp): Code: [AUSKLAPPEN] if status <>-1 then status=image_move(status, x,y,befehl$,bildhandle) end if . . . function move_image(status,x,y,befehl$,bildhandle) if mid(befehl$,status,1)<>0 then for zaehler= 1 to status+1 ;prüfe mit mid(befehl,i,1) auf richtung, addiere dementsprechend deine x und y zu den startx und y. next status=status+1 else status=-1 end if drawimage bildhandle,xneu,yneu return status end function Wenn dann ne -1 zurückgegeben wird, kann die nächste Sequenz eingelesen werden. Der prozess ist auch dynamisch, d.h. du kannst die Befehlskette jederzeit ändern, und das ganze kommt ganz ohne globale vars aus. Mit dem mid müsstest du noch in der hilfe schauen bzw. probieren, es kann sein dass du noch einen len(befehl$) brauchst damit kein Programmfehler erzeugt wird... |
||
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 |
![]() |
TheShadowModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Unter "richtigen" Basics (wie VB, etc.) gibts den Befehl static, damit wird die Variable und ihr Inhalt beim verlassen nicht gelöscht.
ich denke hier wäre es sinnlos - da kann man dann nur 1 bild manipulieren... Types sind hier am besten... |
||
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2 |
Duncki |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Ojay
Jau du hast recht damit kann ich was Anfangen, da brauche ich ja eigentlich nur das Gegenstück Programmieren. Danke @Bladerunner Du kennst doch aber den Spruch "damals war alles Besser" nein Quatsch ![]() Ich möchte nicht mehr ohne Labels oder Functions Arbeiten, meinen Grafikschirm selber über Poke oder eine Assemblerroutine Programmieren, und nur 8 Sprites haben , in max 3 farben , in einer echt tollen Auflösung(320 * 200 oder 160*200). Dann lieber BB2 auf dem AMIGA ![]() Ich werd mal schauen wenn was vernünftiges dabei rauskommt werdet ihr es erfahren , vielleicht können es ja auch noch andere Leute gebrauchen. Gruß Duncki |
||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Michi würde gerne mal an den Befehl (auch in BB)
Gosub erinnern ![]() Ach ja giubt es ja auch noch und so unkompliziert und schnell WOBEI ICH AUCH EIN FAN VON TYPES BIN lol |
||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Und was bringt GoSub hier? | ||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Die Varis die bei Gosub benutzt werden müssen nicht globalisiert werden *g*
oder nich? Na also |
||
Edlothiol |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Toll. Das ändert auch nicht wirklich was an dem Problem. | ||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Dann sach ma was das Prob is. | ||
Duncki |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo alle zusammen,
@Michi1988 natürlich geht das mit gosub , aber ich wollte gerne eine function haben. Weil ich der meinung bin das für solche sachen eigentlich functions gedacht sind. @Balde Runner habe gestern mal deine Version Probiert aber leider klappt das noch nicht, muß mal schauen. aber das mit den zurück gelieferten wert scheint mir durchaus ein Möglichkeit. Übrigens hatte Ich vor kurzem hier im Forum schon einen heftigen Meinungsaustausch Function vs. Gosubs verfolgt. Wer die Deutsche Hilfe von Blitzbase benutzt der kennt ja wahrscheinlich auch diese Tips unter anderem das man lieber mit array's anstatt mit Types arbeiten soll , und mit gosub's anstatt mit Functions, ich schätze mal die Mischung machts. Ich bin jedenfalls noch am probieren habe aber noch nicht das optimale gefunden.Nun hänge ich aber auch nicht 24 Std. am tag davor. Gruß Duncki ![]() |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann auch Banks mitgeben! | ||
between angels and insects |
Omenaton_2 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mach es mit GOSUB und du hast keine Probleme, außer, daß das es gerade "als nicht modisch und nicht cool gilt".
![]() |
||
![]() |
Michi1988 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wer das sagt is ja wohl nen Trottel.
Kommt ka wohl nich darauf an ob du nun Funcs oder gosubs benutzt. Hauptsache es funzt |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group