Mauszeiger rot färben

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Mooch

Betreff: Mauszeiger rot färben

BeitragMo, Okt 18, 2004 11:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
Ich habe ein Problem Question Question
Ich möchte gerne den Mauszeiger (grafik) beim
überlappen langsam rot färben. Ich habs mit gamma versucht,
klappt aber nicht so richtig.

Vielen dank im Vorraus!
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


Kabelbinder

Sieger des WM-Contest 2006

BeitragMo, Okt 18, 2004 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Also so ein Mauszeiger ist ja generell sehr klein.
Dann müsste das gehen, indem du den aus einzelnen Pixeln zusammenstezt, die dann auf Kollision geprüft werden und ggf. rot gefärbt werden.

Du kannst die Pixel mit ReadPixel (oder GetColor) in einen Array oder Type laden.
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Sebastian

BeitragMo, Okt 18, 2004 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
@ Kabelbinder :

Zu langsam .....
*kopfschüttel*
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

Kabelbinder

Sieger des WM-Contest 2006

BeitragMo, Okt 18, 2004 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, vielleicht. Für kleine mauszeiger müsste das eigentlich schon gehen. Ich meine man nimmt da ja nicht das ganze rechteckige Bild, sondern nur die beschrifteten Pixel, die Maskierung wird ja nicht mit gespeichert. Bei so einem einfachen Pfeil sind das ja nicht so viele Pixel. Wenn das echt zu langsam ist, könnte man vielleicht rects 2*2 nehmen, dann sieht aber wahrscheinlich sch*** aus.
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Hubsi

BeitragMo, Okt 18, 2004 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich kann auch nicht glauben das es zu langsam ist. Wie groß kann ein Mauszeiger schon sein? 6*8 Pixel vielleicht? Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Lord_Vader

BeitragMo, Okt 18, 2004 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Da ich das selbst vielleicht bald brauch werde ich mal so ne routine schreiben!

Edit: und hier apsten natürlich Very Happy

Sebastian

BeitragMo, Okt 18, 2004 15:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin von nem Cursor wie bei Windoof ausgegangen.

Keiner kann mir weiß machen das der bloß 6*8 pixel oder so hat .....
Seit 2 Jahren kein BlitzBasic und kein Windows mehr, und stolz darauf !

Lord_Vader

BeitragMo, Okt 18, 2004 16:30
Antworten mit Zitat
Benutzer-Profile anzeigen
32x32 meine ich egal ^^
Also da ich DOCH zu faul bin und grad was anderees zu tun habe sage ich dir ungefär wies geht^^

Das sind die umrechnungsmethode für read- und writepixelfast (von blitzbase.de):

Code: [AUSKLAPPEN]

;Readpixel in RGB umwandeln:
a=(rgb AND $FF000000)/$1000000
r=(rgb AND $FF0000)/$10000
g=(rgb AND $FF00)/$100
b=rgb AND $FF

;Hexdezimal für Writepixel:
rgb=a*$1000000 + r*$10000 + g*$100 + b

a steht für alpha geht aber nur in 3D also am besten immer 0!

Dann nimmst du immer die gelesene farbe und addierst dazu die EINFÄRBFARBE 255,0,0 zB und teilst durch 2!

rneu=r+255/2

Und das machste ambesten mit timer also millisecs() damits net prozabhängig is! Wie erklär ich jez nit hier.
Die anderen farben wegzunemen, weis net wie man das machen soll am besten die differenz zwischen r unr rneu also
Code: [AUSKLAPPEN]

gneu=g-(255-r) ;das natürlich bevor du die rote farbe rechnest!
if gneu<0 then gneu=0


Probiers mal habs net probiert Smile

Kabelbinder

Sieger des WM-Contest 2006

BeitragMo, Okt 18, 2004 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Och, mit mir könnt ihr immer rechnen Very Happy .
Code: [AUSKLAPPEN]
Graphics 640,480,16,1
SeedRnd MilliSecs()

zeiger = CreateImage(15,15)
SetBuffer ImageBuffer(zeiger)
Color 0,250,0
Line 2,0,15,13
Color 0,250,0
Line 1,0,15,14
Color 0,200,0
Line 0,0,15,15
Color 0,150,0
Line 0,1,14,15
Color 0,150,0
Line 0,2,13,15
Color 0,0,255
Oval 0,0,5,5
HandleImage zeiger,0,0
MaskImage zeiger,0,0,0

bild = CreateImage(100,100)
SetBuffer ImageBuffer(bild)
Cls
Color 255,255,255
Oval 0,0,100,100

Dim punkt(300,6)
SetBuffer BackBuffer()
DrawImage zeiger,0,0
For i = 0 To 15
For j = 0 To 15
wert = ReadPixel(i,j)
rot = (wert And $FF0000)/$10000
gruen = (wert And $FF00)/$100
blau = (wert And $FF)
If rot + gruen + blau <> 0 Then
punkt(num,3)=1
punkt(num,1)=i
punkt(num,2)=j
punkt(num,4)=rot
punkt(num,5)=gruen
punkt(num,6)=blau

num = num + 1
EndIf
Next
Next

Repeat

mx = MouseX()
my = MouseY()

DrawImage bild,100,100

For i = 0 To 300
If punkt(i,3)=1 Then

If ImageRectCollide(bild,100,100,0,punkt(i,1)+mx,punkt(i,2)+my,1,1) Then
Color 255,0,0
Else
Color punkt(i,4),punkt(i,5),punkt(i,6)
EndIf

Plot punkt(i,1)+mx,punkt(i,2)+my

EndIf
Next

Flip
Cls
Until KeyHit(1)
End
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Mooch

Betreff: Danke

BeitragDi, Okt 19, 2004 13:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die vielen Antworten!
Ich werds mal ausprobieren!
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


Jan_

Ehemaliger Admin

BeitragDi, Okt 19, 2004 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
hm, ich würde mir nicht die beine rausreisen, sondern einfach 2 Grafiken malen, da kann man mehr ändern, als nur rot und dann mit if then else einfach den passenden Mauszeiger zeichnen!
between angels and insects

Mooch

Betreff: ...

BeitragMi, Okt 20, 2004 18:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie meinst du das?
Soll ich so viele Bilder zeichnen oder meinst du überblenden (Müsste mir mal jemand erklären, aber ich such mal)?
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


 

Gerhard

BeitragMi, Okt 20, 2004 18:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Er meint, dass du zwei Mauszeiger verwenden könntest, einen weissen und einen roten.

Grundsätzlich zeichnest du den weissen Mauszeiger und bei Überlappung zeichnest du anstelle des weissen den roten Mauszeiger. Dann hast du zwar keine langsame Farbüberblendung - aber wer benötigt schon was Langsames...

Mooch

Betreff: ...

BeitragFr, Okt 22, 2004 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Ach so...
Das benutze ich grade auch.
Aber das will ich auf die dauer ersetzen
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


Kabelbinder

Sieger des WM-Contest 2006

BeitragFr, Okt 22, 2004 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Achso, ich dachte mit "langsam rot färben" meintest du, dass die Pixel des Zeiger rot gefärbt werden, die das Bild berühren. (s.o.)
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Mooch

Betreff: ...

BeitragSa, Okt 30, 2004 10:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, ich meinte folgendes: Der Mauszeiger soll von blau oder weiß erst nur ein bisschen röter, dann immer mehr rot, bis er nur noch rot ist.
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


Firstdeathmaker

BeitragSa, Okt 30, 2004 12:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich habe auch eine Möglichkeit (etwas komplizierter)

Man erstellt ein 2 Sprites, auf das eine zeichnet man den Ausgansmauszeiger ein, auf den anderen den roten. Dann kann man mit entityalpha den Übergang faden. Man könnte sich auch so seinen Mauszeiger einfach einmal ausrechnen lassen und speichern (damit man nachher im Programm nicht immer so verfahren muss).

Ich hab das bei meinem Intro verwendet, gibt nen geilen Übergang:

Code: [AUSKLAPPEN]
Local tmp_sprite=CreateSprite()
Local tmp_sprite2=CreateSprite()
MoveEntity tmp_sprite,0,0,10
MoveEntity tmp_sprite2,0,0,10
ScaleSprite tmp_sprite,10,8
ScaleSprite tmp_sprite2,10,8
Local tmp_texture=CreateTexture(SCREEN_X,SCREEN_Y)
Local tmp_texture2=CreateTexture(SCREEN_X,SCREEN_Y)

SetBuffer TextureBuffer(tmp_texture)
Local tmp_img=LoadImage("images\iglogo1.png")
MidHandle tmp_img
DrawImage tmp_img,SCREEN_X/2,SCREEN_Y/5*3
EntityTexture tmp_sprite,tmp_texture

SetBuffer TextureBuffer(tmp_texture2)
tmp_img=LoadImage("images\iglogo2.png")
MidHandle tmp_img
DrawImage tmp_img,SCREEN_X/2,SCREEN_Y/5*3
EntityTexture tmp_sprite2,tmp_texture2

SetBuffer BackBuffer()

EntityAlpha tmp_sprite2,0

For i=0 To 100
   Cls
   EntityAlpha tmp_sprite,i/100.0
   RenderWorld
   Flip
   Delay 10
Next


For i=0 To 100 Step 2
   Cls
   EntityAlpha tmp_sprite,(100-i)/100.0
   EntityAlpha tmp_sprite2,i/100.0
   RenderWorld
   Flip
   Delay 10
Next

For i=0 To 100
   Cls
   EntityAlpha tmp_sprite,(100-i)/100.0
   RenderWorld
   Flip
   Delay 10
Next

www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group