Mousedown - Funktion trotzdem nur einmal ausführen (nochmal)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

miLORD

Betreff: Mousedown - Funktion trotzdem nur einmal ausführen (nochmal)

BeitragDo, Mai 25, 2006 17:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin,

Ich möchte bei mousedown(1), dass eine funktion ausgeführt wird.
Leider wird diese funktion oft nacheinander ausgeführt, wenn man nciht ganz schnell die taste wieder loslässt.

Wie kann man das programmieren, dass die funktion selbst nur einmal ausgeführt wird, der rest (der sonst noch bei mousedown passiert) jedoch ständig?

vielen dank schonmal im vorraus

miLORD
brqwq?! oO
  • Zuletzt bearbeitet von miLORD am Do, Mai 25, 2006 18:33, insgesamt einmal bearbeitet

Artemis

BeitragDo, Mai 25, 2006 17:15
Antworten mit Zitat
Benutzer-Profile anzeigen
dann nimm für die funktion ql:mousehit.

miLORD

BeitragDo, Mai 25, 2006 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenns so einfach wäre...

Ich möchte den rest ja immer ausgeführt haben...
brqwq?! oO

D2006

Administrator

BeitragDo, Mai 25, 2006 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Siehe hier:
https://www.blitzforum.de/foru...t=mousehit

MfG
D2006
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Kryan

BeitragDo, Mai 25, 2006 17:37
Antworten mit Zitat
Benutzer-Profile anzeigen
mach es so:

am anfang einer repeat-schleife machst du mh1=MouseHit(1) und überall, wo es verwendet werden soll, schreibst du einfach mh1 statt MouseDown(1).
In der Funktion setzt du es dann auf 0...also mh1=0

mh1 sollte am besten global deklariert sein Wink
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

miLORD

BeitragDo, Mai 25, 2006 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
mir geht ein licht auf! prima, vielen dank allen!
brqwq?! oO

miLORD

BeitragDo, Mai 25, 2006 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal sry für den doppelpost, aber sonst wird das hier nicht mehr angesehn:

Funktioniert leider doch nicht so, wie ich das will.

ich möchte eine rückgängig-funktion schreiben. wenn man also etwas macht, soll man mit keyhit(14) die letzten rückgängig machen können (is nicht wahr, DAZU is sone rückgängig-funktion da?!?). Man muss folglich die letzten schritte speichern, was ich nur EINMAL haben will, da er sonst 40 mal das gleiche rückgängig macht. allerdings soll man sachen ziehen können, weshalb keyhit nicht möglich ist...

Hab schon timer ausprobiert, aber das geht auch nicht... Shocked
brqwq?! oO

Kryan

BeitragDo, Mai 25, 2006 19:08
Antworten mit Zitat
Benutzer-Profile anzeigen
oha...das ist ein schwierigeres unterfangen:

also du kannst ja jeden schritt in nem typ speichern...:

Type aktion
Field aktions_id ; 1 für Objekt bewegt etc..
Field bank
End Type

In die Bank kannst du dann die Informationen reinpacken:

Wir bewegen mal ein Objekt:
BlitzBasic: [AUSKLAPPEN]

							
Webspaceanbieter?
Klick hier!
Kultige Spieleschmiede?
Klick hier!

miLORD

BeitragFr, Mai 26, 2006 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich schon fertig war mit der funktion, hab ich das so:

Code: [AUSKLAPPEN]


Dim last_schritt$(40)
Dim last_Z(40)
Dim last_S(40)

;wenn was bewegt wird
If LMB = Down Then
 letzterSchritt(Zeile,Spalte)
EndIf

Function letzterSchritt(saved_Z,saved_S)
If Not ((last_schritt$(rueckschritt)=level$(saved_Z,saved_S)) And (last_Z(rueckschritt) = saved_Z) And (last_S(rueckschritt) = saved_S)) Then
 rueckschritt = rueckschritt + 1
 If rueckschritt = 41 Then
  For T = 3 To 40
   last_schritt$(T) = last_schritt$(T-1)
   last_Z(T) = last_Z(T-1)
   last_S(T) = last_S(T-1)
  Next
  rueckschritt = 40
 EndIf
 Last_Schritt(rueckschritt) = level(saved_Z,saved_S)
 last_Z(rueckschritt) = saved_Z
 last_S(rueckschritt) = saved_S
EndIf
End Function


Function rueckgaengig()
 Level(last_Z(rueckschritt),last_S(rueckschritt)) = last_schritt$(rueckschritt) 
 rueckschritt = rueckschritt - 1
 If  rueckschritt =< 1 Then rueckschritt = 2
End Function


Es sind max. 40 schritte "rückgängigmachbar"... sobald man mehr hat, werden alle einen schritt weiter nach hinten verschoben, der letzte entfällt.

Das funktioniert ja auch prächtig, nur wird diese funktion sehr oft ausgeführt, wenn man länger gedrückt hält als eine millisekunde!
Dementsprechend macht er alles zig-mal als letzten schritt und es verändert sich erst beim x-ten mal rückgängigmachen etwas. und das ist mein problem.

Meine Idee war, zu prüfen, ob der jetzige letzte schritt dem vorherigen gleich ist, und wenn ja, ihn einfach nciht zu speichern. habs probiert, mach aber irgendwas falsch...

ich weiß nicht mehr weiter...
brqwq?! oO

5k41

BeitragFr, Mai 26, 2006 16:14
Antworten mit Zitat
Benutzer-Profile anzeigen
mach doch einfach einen timer, der nur einen klick pro 500 Millisekunden aufnimmt... sollte eigentlich schon reichen!

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

miLORD

BeitragFr, Mai 26, 2006 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie oben geschrieben, geht das nicht, da, wenn man zieht, einige kästchen gar nciht ins rückgängigmachen fallen, weil der timer davor ist... man müsste für jedes kästchen einen neuen timer ablaufen lassen, dann ginge es. hab ich auch schon probiert, wie auch die überprüfung ob der schritt dem letzten entspricht...

EDIT: Hat sich erledigt, ich habe die abfrage einfach vor das mousedown gesetzt. danke an alle.
brqwq?! oO

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group