Deutsch
Forum

Sprites mit Tastatur bewegen

 
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#
 
24.04.2004  
 



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
 
24.04.2004  
 



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!
 
24.04.2004  
 



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
 
24.04.2004  
 



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.
 
24.04.2004  
 



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:
KompilierenMarkierenSeparieren
Declare 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
 
24.04.2004  
 



Hi Frank,
hatte bisher keine Zeit. Also vielen Dank !!
 
24.04.2004  
 



Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.553 Betrachtungen

Unbenanntvor 0 min.
macuto20.11.2012
Peter Max Müller29.09.2012
Gabor Krizsma08.08.2011

Themeninformationen

Dieses Thema hat 1 Teilnehmer:

unbekannt (7x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie