ImageMovement Funktion Variablen nicht Global Deklarieren

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Duncki

Betreff: ImageMovement Funktion Variablen nicht Global Deklarieren

BeitragDi, März 23, 2004 13:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 23, 2004 13:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, bei mir Funzt es, mit B3D und B+!

keine ahnung, was du meinst!
between angels and insects
 

Duncki

BeitragDi, März 23, 2004 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
@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

BeitragDi, März 23, 2004 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 23, 2004 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst einen extra Type mit den Daten, die vorher Global waren, anlegen.
Also:
Code: [AUSKLAPPEN]
Type ImageMove
  Field b,a,m$,stpx,stpy,dx,dy,imx,imy,fr,im,test
End Type
Benutzung dann so:
Code: [AUSKLAPPEN]
; Einmal:
i.ImageMove = New ImageMove
; Beliebig oft:
ImageMove(i,blabla... )
Natürlich müsste die ImageMove - Funktion selbst auch noch mal angepasst werden.
 

Ensign Joe

BeitragDi, März 23, 2004 15:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Sad Unter "richtigen" Basics (wie VB, etc.) gibts den Befehl static, damit wird die Variable und ihr Inhalt beim verlassen nicht gelöscht.

Den gibts aber hier nicht (in BB) Sad
 

Duncki

BeitragDi, März 23, 2004 17:34
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Laughing

Gruß
Duncki
 

OJay

BeitragDi, März 23, 2004 18:09
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
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?

BladeRunner

Moderator

BeitragDi, März 23, 2004 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
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

TheShadow

Moderator

BeitragDi, März 23, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, März 23, 2004 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@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 Smile natürlich ist BB3D oder BB+ Besser, gar keine frage.
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 Very Happy .

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

BeitragDi, März 23, 2004 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Michi würde gerne mal an den Befehl (auch in BB)

Gosub

erinnern
Exclamation
Ach ja giubt es ja auch noch und so unkompliziert und schnell

WOBEI ICH AUCH EIN FAN VON TYPES BIN
lol
 

Edlothiol

BeitragDi, März 23, 2004 21:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Und was bringt GoSub hier?

Michi1988

BeitragDi, März 23, 2004 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Varis die bei Gosub benutzt werden müssen nicht globalisiert werden *g*
oder nich?
Na also
 

Edlothiol

BeitragDi, März 23, 2004 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Toll. Das ändert auch nicht wirklich was an dem Problem.

Michi1988

BeitragDi, März 23, 2004 21:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann sach ma was das Prob is.
 

Duncki

BeitragMi, März 24, 2004 10:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

Jan_

Ehemaliger Admin

BeitragMi, März 24, 2004 12:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann auch Banks mitgeben!
between angels and insects
 

Omenaton_2

BeitragMi, März 24, 2004 12:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach es mit GOSUB und du hast keine Probleme, außer, daß das es gerade "als nicht modisch und nicht cool gilt".
Laughing

Michi1988

BeitragMi, März 24, 2004 12:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Wer das sagt is ja wohl nen Trottel.
Kommt ka wohl nich darauf an ob du nun Funcs oder
gosubs benutzt. Hauptsache es funzt

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group