Forum | | | | | Ich möchte ein Sprite mit den Tasten bewegen. Mein erster Versuch ist nichts weiter als ein gekürztes ein Beispiel mit der Biene. Ich bin mir aber ziemlich sicher, dass die Tastaturabfrage und Movesprite so nicht kombiniert werden. (Scrollen des Hintergrundes ist in den Beispielen ja prima erklärt.) Ich habe mal einen Versuch ohne Prospeed geschrieben (V 7.0) und da habe ich einfach nur x% erhöht bzw. verkleinert und dann MCop-iert. (siehe unten und hinter -----?????). Geht das hier etwa auch ? Vielleicht hat einer auch schon ein kleines Programm geschreiben wo ich blos abgucken brauche ? Jedenfalls im Voraus vielen Dank und nochmal: Guten Rutsch und ein gesunde Neues Jahr ! Jürgen. KompilierenMarkierenSeparieren------------
Declare HWnd&, Bereich#, Neu&, Background&
Declare fensterkopie1&, fensterkopie2&, spriteplane&
Declare sprite1&, x%, y%, ende%
Dim Bereich#,512
X% = 100
y% = 200
$I Prospeed_Funktionen.inc
neu&=usedll("ProSpeed.dll")
def getKey(1) !"user32","GetKeyState"
WindowStyle 26
cls
SetTrueColor 1
Hwnd& = %HWnd
string bereich#,0="bmps/Hintergrund.jpg"
background&=LoadExtImage(bereich#)
CopyExtBmp(%HDC, 0,0,800,400,background&,0,0,0)
CopyExtBmp(%HDC2,0,0,800,400,background&,0,0,0)
fensterkopie1&=CreateExtBmp(%HDC,800,400)
fensterkopie2&=CreateExtBmp(%HDC,800,400)
CopyExtBmp(fensterkopie1&,0,0,800,400,%HDC,0,0,0)
CopyExtBmp(fensterkopie2&,0,0,800,400,%HDC,0,0,0)
string bereich#,0="bmps/sprites.gif"
spriteplane&=LoadExtImage(bereich#)
sprite1&=InitSprite(spriteplane&,%HDC,fensterkopie1&,fensterkopie2&,0,0,24,18,4,1,6,x%,y%,1,1)
SetSpriteSpeed (sprite1&,10,0)------????
---------------------------
Whilenot ende%
waitinput------????
sleep 10
IF @equ(%key,2) OR @equ(%key,27)
ende%=1
Endif
If @LT(getkey(49),-126)
sub x%,2
MoveSprite(sprite1&,x%,y%)------------????
Hier stünde:
Startpaint -1
MCopyBmp "Sprite nach Fensterkopie", x%, y%
u. s. w......
EndPaint
EndIf
If @LT(getkey(51),-126)
add x%,2
MoveSprite(sprite1&,x%,y%)------------????
EndIf
Mcopy "Fensterkopie auf den Bildschirm
wend
Wo würde ich den Sprung in die PROC hinschreiben die y% für einen Sprung errechnet?
=========================
DeleteAllSprites()
FreeExtBmp(background&)
FreeExtBmp(spriteplane&)
FreeExtBmp(fensterkopie1&)
FreeExtBmp(fensterkopie2&)
freedll neu&
Dispose bereich#
|
| | | | |
| | | Hi,
Hast dus schon mit ProSpeeds GetSystemKey() probiert ? MoveSprite() und GetSystemKey() müßten ohne Probleme kombinierbar sein...
Ja, ebenfalls an alle einen grandiosen Rutsch nach 2004 !!!
Gruß, Frank |
| | | | |
| | | Hi Frank, GetSytemKey ist nicht das Problem. (Im Übringen sogar etwas langsamer als getkey(.)). Um eine Jump & Run zu schreiben brauche ich deine DLL, da sie die Funktion SetBackAutoCollision enthält und vor allem eine Tabelle erstellt, die meine Figur (über die weißen Felder der Fensterkopie) führt. Aber genau mit dieser Funktion habe ich meine Probleme: Wenn ich die Figur per MoveSprite mittels Tasten bewege und SetBackAutoCollision auf Kollision gestellt ist, hüpft die Figur. Seitlich kann ich die Figur dann gar nicht mehr bewegen. Also die Steuerung per Taste und SetBackAutoCollision sind das eigentliche Problem. Vielleicht kannst Du mir helfen, da ich glaube alle Varianten ausprobiert zu haben. (Im Spieleforum gehts anscheinend um das gleiche Problem) Ansonsten ein gesundes neues Jahr 2004. Gruß Jürgen! |
| | | | |
| | | Hi,
in diesem Fall kommst du mit MoveSprite() nicht immer weiter. Hierzu müßtest du SetSpritePos() benutzen. Hatte selber gestern das gleiche Problem und mit SetSpritePos elegant gelöst.
Gruß, Frank |
| | | | |
| | | Hi Frank Habe ich ja auch schon probiert, aber SetBackAutoCollision funktioniert dann nicht. Wenn ich nicht zu sehr nerve, vielleicht hat irgenwer schonmal ein kleines Beispiel programmiert ? Oder hast Du vielleicht einen Auszug aus Deinem Programm ? Ich entschuldige für die Mühe, die ich bisher gemacht habe und bedanke mich für Dein Verständnis. Tschüß Jürgen. |
| | | | |
| | | Hallo Jürgen,
du machst keine Mühe ! Dafür ist dieses Forum doch gedacht, um Fragen zu beantworten !
Ich hab deinen Source etwas verändert. Das Sprite kann jetzt mit den Cursortasten innerhalb bestimmter Grenzen (deiner Wahl) gesteuert werden. Sogar diagonal ! Das ganze sollte ohne Probleme mit SetBackAutoCollision() kombinierbar sein... Für die Tastenabfrage erscheint mir die API GetKeyState() am idealsten. WaitInput kannst du nicht benutzen, es sei denn, du setzt einen kleinen Timer. Aber ist ja auch gar nicht nötig...
Hier der Code: KompilierenMarkierenSeparierenDeclare HWnd&, Bereich#, Neu&, Background&
Declare fensterkopie1&, fensterkopie2&, spriteplane&
Declare sprite1&,x&,y&,key&
Declare speedx&,speedy&,randl&,randr&,rando&,randu&
Dim Bereich#,512
SetTrueColor 1
$I Prospeed_Funktionen.inc
neu&=usedll("ProSpeed.dll")
DEF GetKeyState(1) !"USER32","GetKeyState"
DEF IsKey(1) and(GetKeyState(&(1)),$8000)
WindowStyle 26
Window 0,0-800,400
Hwnd& = %HWnd
Aktuelle Position
x&=100
y&=100
Geschwindigkeit des Sprites
speedx&=2
speedy&=2
Randgrenzen absolut (links, oben, rechts und unten)
randl&=0
rando&=0
randr&=200
randu&=200
string bereich#,0="bmps/Hintergrund.jpg"
background&=LoadExtImage(bereich#)
CopyExtBmp(%HDC, 0,0,800,400,background&,0,0,0)
CopyExtBmp(%HDC2,0,0,800,400,background&,0,0,0)
fensterkopie1&=CreateExtBmp(%HDC,800,400)
fensterkopie2&=CreateExtBmp(%HDC,800,400)
CopyExtBmp(fensterkopie1&,0,0,800,400,%HDC,0,0,0)
CopyExtBmp(fensterkopie2&,0,0,800,400,%HDC,0,0,0)
string bereich#,0="bmps/sprites.gif"
spriteplane&=LoadExtImage(bereich#)
sprite1&=InitSprite(spriteplane&,%HDC,fensterkopie1&,fensterkopie2&,0,0,24,
18,4,1,6,100,100,speedx&,speedy&)
While 1
Sleep 1
key&=GetSystemKey()
Case (key&=2 OR key&=27):BREAK
Steuern per Cursortasten
Case IsKey($25):x&=x&-speedx& links
Case IsKey($27):x&=x&+speedx& rechts
Case IsKey($26):y&=y&-speedy& oben
Case IsKey($28):y&=y&+speedy& unten
Stößt Sprite an Randgrenze ?
Case x&<=randl&:x&=randl&
Case x&>=randr&:x&=randr&
Case y&<=rando&:y&=rando&
Case y&>=randu&:y&=randu&
MoveSprite(sprite1&,x&,y&)
Wend
DeleteAllSprites()
FreeAllExtBmps()
freedll neu&
Dispose bereich#
Gruß, Frank |
| | | | |
| | | Hi Frank, hatte bisher keine Zeit. Also vielen Dank !! |
| | | | |
|
AntwortenThemenoptionen | 2.571 Betrachtungen |
ThemeninformationenDieses Thema hat 1 Teilnehmer: |