Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

07.10.2006, 23:28

DS Programmierung: Logikfehler?

hi, ich nutze die PALib zur programmierung des nintendo ds und spiele gerade ein wenig mit den funktionen rum um mich besser mit der library vertraut zu machen. im moment hab ich ein kleines problem mit dem Stylus, was ich versuche zu erreichen ist folgendes: ich will eine nachricht ausgeben nachdem der stylus über den touchscreen bewegt wurde. leider wird der text auch ausgegeben wenn der stylus überhaupt nicht bewegt wurde.

hier der code der funktion die dafür zuständig ist:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
void CheckForSlash()
{

        u8 LastStylusX = 0;
        u8 LastStylusY = 0;

        u8 NewStylusX  = 0;
        u8 NewStylusY  = 0;


        //aktuelle stylus position speichern

        if(Stylus.Newpress)
        {
             LastStylusX = Stylus.X;
             LastStylusY = Stylus.Y;

             PA_OutputText(1,1,6,"LastX: %d  LastY: %d",LastStylusX, LastStylusY);
        }

        
        if(Stylus.Released)
        {

            NewStylusX = Stylus.X;
            NewStylusY = Stylus.Y;
            
            PA_OutputText(1,1,8,"NewX: %d  NewY: %d",NewStylusX, NewStylusY);

            if(LastStylusX != NewStylusX)
            {
                PA_OutputText(0,9,11,"SLUUUUUSH!!");
            }
            if(LastStylusY != NewStylusY)
            {
                PA_OutputText(0,9,11,"SWISSSSSH!!");
            }
        }
        else
        {
            //PA_ClearTextBg(0);

        }
        
}


das kommt dabei raus:
http://xs307.xs.to/xs307/06406/huh.gif

irgendwo muss sich ein simpler logikfehler eingeschlichen haben, sieht ihn jemand :)?
never send a human to do a machines job.

Anonymous

unregistriert

2

08.10.2006, 04:11

Zitat

Ich will eine nachricht ausgeben nachdem der stylus über den touchscreen bewegt wurde

Quellcode

1
2
3
4
5
6
7
8
if(LastStylusX != NewStylusX)
            {
                PA_OutputText(0,9,11,"SLUUUUUSH!!");
            }
if(LastStylusY != NewStylusY)
            {
                PA_OutputText(0,9,11,"SWISSSSSH!!");
            } 


So stellst du nur fest ob x oder Y sich verändert haben. Da meistens beides des Fall ist steht zum schluss "SWISSSSSSSH" da (du überschreibst denn Text ja (9,11)). Deine Logik muss also leuten:

Normal = SLUSH
If x oder Y geändert dann SWISH.

Wenn ich verstanden habe was du willst. Ansonsten ist der Stylus ja immer Released und beim nächsten Durchgang automatisch 0.0 (genau wie deine (neu)initialisierten Variablen.

Auch wenn ich jetzt nicht 100% verstehe was eigentlich passieren soll und den ganzen Code nicht kenne, ich würde mit stylus.held erst mal prüfen ob überhaupt was gemacht werden soll.

cu

3

08.10.2006, 12:13

das der text überschrieben wird ist tatsächlich beabsichtigt, ich wundere mich nur aus welchem grund der text ausgegeben wird obwohl sich laut meinen variablen NewStylusX,Y und LastStylusX,Y nichts verändert hat (siehe screenshot).

wenn der stylus den bildschirm berührt, werden die aktuellen koordinaten gespeichert, dann wird der stylus auf dem bild schirm gehalten, bewegt und irgendwann losgelassen, sobald er losgelassen wurde werden die neuen koordinaten gespeichert. die neuen und alten koordinaten werden dann auf ungleichheit geprüft um festzustellen ob der stylus über den bildschirm bewegt wurde, ist dies der fall, wird ein text ausgegeben. so sollte es zumindest laufen, aber der text wird auch ausgegeben wenn sich überhaupt nichts tut.
never send a human to do a machines job.

Anonymous

unregistriert

4

08.10.2006, 12:40

Versuch mal das. Ansonsten poste alles damit ich es in der IDE testen kann.

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void CheckForSlash()
{

        u8 LastStylusX,LastStylusY,NewStylusX,NewStylusY ;
        LastStylusX=Stylus.X;
        LastStylusY=Stylus.Y;
        NewStylusX=Stylus.X;
        NewStylusY=Stylus.Y;


PA_OutputText(1,1,6,"LastX: %d  LastY: %d",LastStylusX, LastStylusY);


       
        if(Stylus.Released)
        {

            NewStylusX = Stylus.X;
            NewStylusY = Stylus.Y;
           
            PA_OutputText(1,1,8,"NewX: %d  NewY: %d",NewStylusX, NewStylusY);

            if(LastStylusX != NewStylusX)
            {
                PA_OutputText(0,9,11,"SLUUUUUSH!!");
            }
            if(LastStylusY != NewStylusY)
            {
                PA_OutputText(0,9,11,"SWISSSSSH!!");
            }
        }
        else
        {
            //PA_ClearTextBg(0);

        }
       
} 

Werbeanzeige