Point and Click
Übersicht

Niu-IunBetreff: Point and Click |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi!
Ich versuche gerade ein Point and Click Adv aufzubauen. Das Problem: Ich habe mich seit 2,5 Jahren kein bisschen mehr mit Coding beschäftigt Also warum funktioniert das hier nicht? Graphics 640, 480, 16, 2 ;;;;;;;;;;; ClsColor 0, 0, 0 SetBuffer BackBuffer() X= 100 Y= 100 StepX = 0 ;;;;;;;;;;; Repeat ;;; If MouseDown(1) Then MouX = MouseX() If MouseDown(1) Then MouY = MouseY() If MouseDown(1) Then StepsX = MouX - X If MouseDown(1) Then StepsY = MouY - Y ;;; .A If StepsX > 0 Then X = X + 1 And StepsX = StepsX - 1 If StepsX < 0 Then X = X - 1 And StepsX = StepsX + 1 Cls Plot X, Y Flip If StepsX > 0 Or StepsX < 0 Then Goto A Until KeyHit(1) End |
||
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: If MouseDown(1) Then MouX = MouseX()
If MouseDown(1) Then MouY = MouseY() If MouseDown(1) Then StepsX = MouX - X If MouseDown(1) Then StepsY = MouY - Y Das funktioniert nicht. Du kannst nur einmal in der Schleife MouseDown abfragen. Dafür gibt es Endif: Code: [AUSKLAPPEN] If MouseDown(1) Then MouX = MouseX() MouY = MouseY() StepsX = MouX - X StepsX = MouX - X EndIf Zitat: If StepsX > 0 Then X = X + 1 And StepsX = StepsX - 1
If StepsX < 0 Then X = X - 1 And StepsX = StepsX + 1 Das ist genauso falsch. ql:And verknüpft Bedingungen und keine Befehle. Du musst das wieder mit einem mehrzeiligen If..Then..EndIf machen: Code: [AUSKLAPPEN] If StepsX > 0 Then
X = X + 1 StepsX = StepsX - 1 EndIf If StepsX < 0 Then X = X - 1 StepsX = StepsX + 1 EndIf Ich hab jetzt nur die syntaktischen Fehler gemacht. Ps: Versuch das Goto mit einer ql:While -Schleife zu umgehen |
||
Niu-IunBetreff: Whoay! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
thx, funktioniert jetzt wonderbra! | ||
-------------------------------------------------------
Whoay! |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
JonasCleve hat Folgendes geschrieben: Das funktioniert nicht. Du kannst nur einmal in der Schleife MouseDown abfragen.
Da muss ich Dich korrigieren, denn diese Einschränkung gilt nur für Hit-Abfragen. Down-Abfragen kannst Du so oft wiederholen, wie Du magst. |
||
![]() |
Artemis |
![]() Antworten mit Zitat ![]() |
---|---|---|
ahja, man darf sich ja mal vertuen.
aber trotzdem ist meine lösung wesentlich eleganter und besser. |
||
Niu-Iun |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
noch eine Frage wie genau funktioniert "showpointer"?
Ich hab einfach das am anfang geschrieben, aber nix passiert. muss ich etwa meinen speicher noch extra mit nem cursor bild belasten? |
||
-------------------------------------------------------
Whoay! |
gamble |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ShowPointer funktioniert nur im Fenstermodus. | ||
![]() |
x-pressiveBetreff: Re: Point and Click |
![]() Antworten mit Zitat ![]() |
---|---|---|
Niu-Iun hat Folgendes geschrieben: Graphics 640, 480, 16, 2
Also ich frage mich immer wieder, warum alle dem User 16-Bit Farbtiefe aufzwingen und sich selbst auch noch damit beschneiden. Hat das seinen Grund für euch oder ist das ein ängstliches Festhalten am Technik-Standard von vor zehn Jahren? |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
AvaGast |
![]() Antworten mit Zitat |
|
---|---|---|
Abwärtskompatiblität? ![]() Also bei mir laufen 32-bit erst seit ein paar Wochen. *blupp* |
||
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wuzz? ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Ava, [Graphics 640, 480, 0, 2] nimmt im Fenstermodus die Farbtiefe die des von Sinnlos,..,.Ähh Windows. | ||
![]() |
d-bug |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich glaub wir sollten hier mal ironie-tags einführen ![]() |
||
Niu-Iun |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
kein festhalten an standards, nur im Buch, mit dem ich angefangen habe wurde immer mit 16 gearbeitet, und das hab ich mir dann angewöhnt ![]() |
||
-------------------------------------------------------
Whoay! |
![]() |
x-pressive |
![]() Antworten mit Zitat ![]() |
---|---|---|
Geht wahrscheinlich vielen so. Es gibt aber eigentlich keinen Grund, warum man sich da beschränken sollte - Farbverläufe sehen unter 16-Bit ziemlich grottig aus und Farben werden eventuell falsch dargestellt. Das Argument "Speicher sparen" finde ich heutzutage ziemlich lächerlich -vor allem, wenn man bedenkt, daß 99% aller Blitz games alles andere als aufwändig gestaltet sind.
Wenn du einen höheren Modus benutzt, frag vorher aber sicherheitshalber, ob der User das darstellen kann (mit GfxModeExists), ansonsten halt einfach eine 0 einsetzen, dann wird der bestehende Modus beibehalten. Sorry, wenn das vom Thema wegführt, aber man muß das ja mal ansprechen. Ein moderner PC kann eben mehr als ein Amiga -auch wenn's viele net glauben wollen ![]() |
||
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL |
Niu-IunBetreff: funktioniert wieder was nicht |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also das soll passieren: Das Bild char soll an die stelle wo man hinklickt wandern. Und zwar nicht sofort sondern halt pixel für pixel. Dabei soll es sich aber nicht schräg bewegen. es soll zuerst der kürzere Weg, dann der längere benutzt werden (X (100 pixel) dann Y(50 pixel).
was aber nicht funktioniert: Die Koordinaten verändern sich gar nicht und die gehanimationen klappen nur für oben und rechts. MidHandle Cursor MaskImage Char, 255, 0, 255 MaskImage Cursor, 255, 255, 255 ; X = 100 Y = 100 M = 0 MX = 0 MY = 0 ;;;;;;;;;;; ; Char001FR = 7 ; Counter001 = 1 Counter002 = 1 Counter003 = 1 Counter004 = 1 While Not KeyHit(1) ;;; If MouseHit(1) Then MouX = MouseX() MouY = MouseY() If Abs(MouX-X) > 0 Then MX = 1 If Abs(MouY-Y) > 0 Then MY = 1 If Abs(MouX-X)>Abs(MouY-Y) Then M = 1 Else M = 2 EndIf EndIf ;;; If Sgn(MouX-X) = -1 And M=1 Or MX = 1 And M=1 Then X = X + 1 Gosub SteuerungLinks If MouX-X=0 Then MX = 0 M = 2 End If EndIf If Sgn(MouX-X) = 1 And M=1 Or MX = 1 And M=1 Then X = X - 1 Gosub SteuerungRechts If MouX-X=0 Then MX = 0 M = 2 End If EndIf If Sgn(MouY-Y) = -1 And M=2 Or MY = 1 And M=2 Then Y = Y + 1 Gosub SteuerungUnten If MouY-Y=0 Then MY = 0 M = 1 End If EndIf If Sgn(MouY-Y) = 1 And M=2 Or MY = 1 And M=2 Then Y = Y - 1 Gosub SteuerungOben If MouY-Y=0 Then MY = 0 M = 1 End If EndIf DrawImage Char, X, Y, Char001FR DrawImage Cursor, MouseX(), MouseY() Flip Cls Wend End ;;;;;; Include "subs.bb" subs: ;;; Unterprogramme .SteuerungUnten If Counter001 = 5 Then Counter001 = 1 If Counter001 = 1 Then Char001FR = 8 If Counter001 = 2 Then Char001FR = 7 If Counter001 = 3 Then Char001FR = 6 If Counter001 = 4 Then Char001FR = 7 ; If Sgn(MouY-Y) = 1 Then Counter001 = Counter001 + 1 Delay 100 Return .SteuerungOben If Counter002 = 5 Then Counter002 = 1 If Counter002 = 1 Then Char001FR = 2 If Counter002 = 2 Then Char001FR = 1 If Counter002 = 3 Then Char001FR = 0 If Counter002 = 4 Then Char001FR = 1 ; If Sgn(MouY-Y) = -1 Then Counter002 = Counter002 + 1 Delay 100 Return .SteuerungRechts If Counter003 = 5 Then Counter003 = 1 If Counter003 = 1 Then Char001FR = 5 If Counter003 = 2 Then Char001FR = 4 If Counter003 = 3 Then Char001FR = 3 If Counter003 = 4 Then Char001FR = 4 ; If Sgn(MouX-X) = 1 Then Counter003 = Counter003 + 1 Delay 100 Return .SteuerungLinks If Counter004 = 5 Then Counter004 = 1 If Counter004 = 1 Then Char001FR = 11 If Counter004 = 2 Then Char001FR = 10 If Counter004 = 3 Then Char001FR = 9 If Counter004 = 4 Then Char001FR = 10 ; If Sgn(MouX-X) = -1 Then Counter004 = Counter004 + 1 Delay 100 |
||
-------------------------------------------------------
Whoay! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Niu-Iun, warum einfach, wenn es auch kompliziert geht? ![]() /EDIT: sgn ist nicht davür da um Abfragen wie If Sgn(MouX-X)=-1 zu machen. Da kannst du genau so gut und übersichtlicher If MouX-X<0 machen. |
||
Niu-Iun |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
biite bitte großer Meister ( ![]() ich glaub ich bin einfach zu dumm dazu... Kann es denn so schwer sein ein Männchen laufen zu lassen? ![]() edit: meinst du den code? Graphics 320, 240, 16, 1 SetBuffer BackBuffer() ClsColor 0, 0, 0 ;;;;;;;;;;; Char = LoadAnimImage("Hero.bmp", 24, 32, 0, 12) Cursor = LoadImage("Pointer.bmp") MidHandle Char MidHandle Cursor MaskImage Char, 255, 0, 255 MaskImage Cursor, 255, 255, 255 ShowPointer X% = 100 Y% = 100 R% = 0 ;;;;;;;;;;; While Not KeyHit(1) ;;; If MouseHit(1) Then MouX = MouseX() MouY = MouseY() If Abs(MouX-X)>Abs(MouY-Y) Then R=1 Else R=2 EndIf ;;; If R=1 Then X=X+Sgn(MouX-X) If MouX-X=0 Then R=2 End If If R=2 Then Y=Y+Sgn(MouY-Y) If MouY-Y=0 Then R=1 End If DrawImage Char, X, Y DrawImage Cursor, MouseX(), MouseY() Flip Cls Wend End Nach oben |
||
-------------------------------------------------------
Whoay! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Niu-Iun, hier mal ein Lösungsvorschlag. Ich kenne leider deine Animationsbilder nicht, da bin ich einfach davon ausgegangen, daß folgende Reihenfolge besteht. Links, Oben, Rechts, Unten... Demnach habe ich den Code angepasst.Code: [AUSKLAPPEN] Graphics 320, 240, 16, 1
Zwei neue Variablen:
SetBuffer BackBuffer() ClsColor 0, 0, 0 ;;;;;;;;;;; Char = LoadAnimImage("Hero.bmp", 24, 32, 0, 12) Cursor = LoadImage("Pointer.bmp") MidHandle Char MidHandle Cursor MaskImage Char, 255, 0, 255 MaskImage Cursor, 255, 255, 255 ShowPointer X% = 100 Y% = 100 R% = 0 ;Laufrichtung ;R=0 Stehen bleiben ;R=1 Laufen Links ;R=2 Laufen Oben ;R=3 Laufen Rechts ;R=4 Laufen Unten T# = 0 ;Animationsstuffe Dim AnimSequenz(3) AnimSequenz(0)=0 AnimSequenz(1)=1 AnimSequenz(2)=2 AnimSequenz(3)=1 ;;;;;;;;;;; ;Hauptschleife While Not KeyHit(1) ;;; If MouseHit(1) Then MouX = MouseX() MouY = MouseY() If Abs(MouX-X)>Abs(MouY-Y) Then R=2+Sgn(MouX-X) Else R=3+Sgn(MouY-Y) EndIf ;;; If R>0 Then T=(T+.2) Mod 4 DrawImage Char, X, Y, (R-1)*3+AnimSequenz(Floor(T)) If R=1 Or R=3 Then X=X+Sgn(MouX-X) If MouX-X=0 Then If MouY-Y=0 Then R=0 Else R=3+Sgn(MouY-Y) End If Else Y=Y+Sgn(MouY-Y) If MouY-Y=0 Then If MouX-X=0 Then R=0 Else R=2+Sgn(MouX-X) End If End If Else DrawImage Char, X, Y, 10 End If DrawImage Cursor, MouseX(), MouseY() Delay 40 Flip Cls Wend End 1) Als Float T# die die Animationsstufe angibt. [T=(T+.2) Mod 4] gibt die Animationsgeschwindigkeit an. [T=(T+.1) Mod 4] langsam, [T=(T+.5) Mod 4] schnell. 2) Als Dimfeld [Dim AnimSequenz(3)] die den Animationszyklus von 0,1,2,1 vorgibt. Auf diese Variable könnte man verzichten wenn die Bilder in Reihe (0,1,2,3) abgelegt währen. Ich würde empfehlen das Image dazu zu ändern! 9216 Byte Grafikspeicher mehrverbrauch. |
||
Niu-Iun |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
danke, danke. Ich werde eine KErze für dich anzünden.
Ich glaub jetzt habsch verstanden. |
||
-------------------------------------------------------
Whoay! |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group