Point and Click

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Niu-Iun

Betreff: Point and Click

BeitragMi, Jan 04, 2006 18:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jan 04, 2006 18:51
Antworten mit Zitat
Benutzer-Profile anzeigen
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-Iun

Betreff: Whoay!

BeitragMi, Jan 04, 2006 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
thx, funktioniert jetzt wonderbra!
-------------------------------------------------------

Whoay!
 

Ava

Gast

BeitragMi, Jan 04, 2006 18:58
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

BeitragMi, Jan 04, 2006 19:05
Antworten mit Zitat
Benutzer-Profile anzeigen
ahja, man darf sich ja mal vertuen.
aber trotzdem ist meine lösung wesentlich eleganter und besser.
 

Niu-Iun

BeitragMi, Jan 04, 2006 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Jan 04, 2006 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
ShowPointer funktioniert nur im Fenstermodus.

x-pressive

Betreff: Re: Point and Click

BeitragMi, Jan 04, 2006 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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
 

Ava

Gast

BeitragMi, Jan 04, 2006 21:12
Antworten mit Zitat
Abwärtskompatiblität? Laughing
Also bei mir laufen 32-bit erst seit ein paar Wochen. *blupp*

x-pressive

BeitragMi, Jan 04, 2006 21:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Wuzz? Shocked Erkläre dich!
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Jan 04, 2006 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
@Ava, [Graphics 640, 480, 0, 2] nimmt im Fenstermodus die Farbtiefe die des von Sinnlos,..,.Ähh Windows.

d-bug

BeitragMi, Jan 04, 2006 22:01
Antworten mit Zitat
Benutzer-Profile anzeigen
ich glaub wir sollten hier mal ironie-tags einführen Wink
 

Niu-Iun

BeitragMi, Jan 04, 2006 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Very Happy
-------------------------------------------------------

Whoay!

x-pressive

BeitragDo, Jan 05, 2006 9:43
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
• BLITZ SHOWCASE:
PARTICLE CANDY • PARTICLE CANDY FOR iPHONE • SPRITE CANDY • DON'T GET ANGRY! 2-3 • CLICK CLACK XL
 

Niu-Iun

Betreff: funktioniert wieder was nicht

BeitragDo, Jan 05, 2006 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jan 06, 2006 1:56
Antworten mit Zitat
Benutzer-Profile anzeigen
@Niu-Iun, warum einfach, wenn es auch kompliziert geht? Smile Also sicherlich brauchst du kein vierseitiges Dokument um eine Gehanimation zusätzlich zu den Verschiebung einzubauen. Ich sage mal... Zu den Code, denn ich dir bereits zu einem anderem Thema gesendet habe, wirst du hier zwei neue Variablen benötigen und zwei neue Zeilen Code... Hier ist Mod (Schaue in der OH nach Mod) dein Freund. Soll ich dir auch hier ein fertigen Code zubereiten? Ich benötige so etwa 5min dafür. Ist ein Vorschlag, aber du sollst es ja auch verstehen...
/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

BeitragFr, Jan 06, 2006 15:09
Antworten mit Zitat
Benutzer-Profile anzeigen
biite bitte großer Meister ( Laughing ) teile deine Weisheit mit mir.

ich glaub ich bin einfach zu dumm dazu... Kann es denn so schwer sein ein Männchen laufen zu lassen? Rolling Eyes

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!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Jan 06, 2006 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
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
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
Zwei neue Variablen:

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

BeitragFr, Jan 06, 2006 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, danke. Ich werde eine KErze für dich anzünden.

Ich glaub jetzt habsch verstanden.
-------------------------------------------------------

Whoay!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group