PlanetSwitch Planet3DS PlanetVita PSP.de PlanetiPhone Classics Forum Handheld-Wiki

PGN-ID:[?] (Nicht eingeloggt)
Login
Registrieren
PlanetDS PlanetGameboy N-Page.de
portablegaming.de  

Zurück   portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung


Development Abteilung Ihr wollt für euren Lieblingshandheld Spiele oder Tools entwickeln?
Bitte die Präfixe benutzen!

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 05.10.2002, 18:43   #1
 
Registriert seit: 30.09.2002

Link hat die Renommee-Anzeige deaktiviert

Link eine Nachricht über ICQ schicken
Standard Buttons

ich will, dass mein programm zählt, wie oft eine bestimmte taste, zum beispiel A, gedrückt wird. wie mache ich das?
ich habs schon mit
if (F_CTRLINPUT_A_PRESSED)
{
taste+=1;
}

versucht - das geht aber nicht!
Link ist offline   Mit Zitat antworten
Sponsored Links
Alt 05.10.2002, 19:14   #2
Ehemaliger Admin
 
Benutzerbild von hurik
 
Registriert seit: 27.12.2001
Ort: Konstanz
Alter: 37
Spielt gerade: Original Wars (PC, 2001) sack schwer ...

hurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannt

hurik eine Nachricht über ICQ schicken
Standard

if (F_CTRLINPUT_A_PRESSED)
{
taste++;
}

so reicht das auch. aber du weist das das in der hauptschleife stehen muss?!?!?
hurik ist offline   Mit Zitat antworten
Alt 05.10.2002, 21:18   #3
 
Registriert seit: 30.09.2002

Link hat die Renommee-Anzeige deaktiviert

Link eine Nachricht über ICQ schicken
Standard

sorry, aber dass man das ganze in die hauptschleife schreiben muss, weiss ja wohl jeder noob. und dass man den term x+=1 auch als x++ oder x=x+1 schreiben kann, ändert leider ebensowenig an meinem problem. das problem ist doch, dass die rechenoperation taste=taste+1 SOLANGE, und nicht WENN die taste A gedrückt ist, durchgeführt wird. je länger ich A gedrückt halt, umso größer wird die variable taste (weil die operation taste=taste+1 immerwieder durchgeführt wird). wenn ich nun A für fünf sekunden gedrückt halte, dann erhalte ich für taste ungefähr einen wert zwischen 4000 und 5000, obwohl ich sie nur 1mal (!) drücke. dabei sollte das programm zählen, wie oft A gedrückt worden ist...

hier ist noch einmal der ganze sourcecode (dir wird auffallen, dass die anzeige von "0x" direkt auf "mindestens 6x" springt, und nicht wie zu erwarten, stufenweise von "0x" auf "1x" und von "1x" auf "2x" usw klettert):

#include "mygba.h"

int main(void)
{
ham_Init();
ham_InitText(0);

int up=0;

while(1)
{


if (F_CTRLINPUT_UP_PRESSED)
{
ham_DrawText(2,10,"UP___");
up+=1;
}
if (F_CTRLINPUT_DOWN_PRESSED)
{
ham_DrawText(2,10,"DOWN_");
up-=1;
}



if (up==0)
{
ham_DrawText(14,10,"___________0x");
}
if (up==1)
{
ham_DrawText(14,10,"___________1x");
}
if (up==2)
{
ham_DrawText(14,10,"___________2x");
}
if (up==3)
{
ham_DrawText(14,10,"___________3x");
}
if (up==4)
{
ham_DrawText(14,10,"___________4x");
}
if (up==5)
{
ham_DrawText(14,10,"___________5x");
}
if (up>=6)
{
ham_DrawText(14,10,"mindestens 6x");
}
}
return 0;
}
Link ist offline   Mit Zitat antworten
Alt 06.10.2002, 02:36   #4
 
Registriert seit: 29.09.2002
Alter: 35

andre p hat die Renommee-Anzeige deaktiviert

Standard

Nur so eine dumme Idee

Ich kann das jetzt nicht technisch erklären, bin eben dumm aber du wirst verstehen, was ich meine. Probier doch einfach mal einen wahnsinnig großen Interwall für a. Ich meine so als ob du ein Sprite bewegen möchtest und du einen kleinen Interwall für den langsameren Ablauf in der Hauptschleife definierst. Dann setzt du den Interwall Wert eben nur noch auf eine große Zahl. Ich glaube nicht das das jemand merken würde, wenn er dein Prog benutzt.(Niemand ist so bescheuert und drückt 2 Std. eine Taste. Vielleicht kennst du ja sogar ne Möglichkeit einen unendlichen einzubauen.(Möglicherweise durch ne unendliche vor Schleife???) Wenn das was ich dir jetzt gesagt habe scheisse klingt hast du recht. Wenn es dir weiterhilft hab ich mal Glück gehabt.(hätte ja sein können.........).
Wenn du keinen Bock hast darüber Nachzudenken warte auf andere Beiträge.

Viel Spaß noch...
andre p ist offline   Mit Zitat antworten
Alt 06.10.2002, 16:44   #5
 
Registriert seit: 30.09.2002

Link hat die Renommee-Anzeige deaktiviert

Link eine Nachricht über ICQ schicken
Standard

ich verstehe, was du meinst, und die idee ist wirklich nicht schlecht, aber glaubst du nicht, dass das ein bißchen zu umständlich ist? es muss doch eine möglichkeit geben dieses problem mit weniger aufwand zu lösen...
Link ist offline   Mit Zitat antworten
Alt 07.10.2002, 00:40   #6
Ehemaliger Admin
 
Benutzerbild von hurik
 
Registriert seit: 27.12.2001
Ort: Konstanz
Alter: 37
Spielt gerade: Original Wars (PC, 2001) sack schwer ...

hurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannt

hurik eine Nachricht über ICQ schicken
Standard

ja gibt es und ich werde sie dir morgen zeigen bzw heute. nach der schule! aber gestern (sonntag) hatte ich einfach keine zeit!
hurik ist offline   Mit Zitat antworten
Alt 07.10.2002, 13:57   #7
 
Registriert seit: 30.09.2002

Link hat die Renommee-Anzeige deaktiviert

Link eine Nachricht über ICQ schicken
Standard

danke, aber das ist nicht mehr nötig. ich habe schon eine lösung gefunden:

#include "mygba.h"

int main(void)
{
ham_Init();
ham_InitText(0);

int up=0, a=0;

while(1)
{
a++;


if (F_CTRLINPUT_UP_PRESSED)
{
ham_DrawText(2,10,"UP");
if (a==1)
{
up+=1;
}
}
else
{
ham_DrawText(2,10,"__");
a=0;
}


if (up==0)
{
ham_DrawText(14,10,"___________0x");
}
if (up==1)
{
ham_DrawText(14,10,"___________1x");
}
if (up==2)
{
ham_DrawText(14,10,"___________2x");
}
if (up==3)
{
ham_DrawText(14,10,"___________3x");
}
if (up==4)
{
ham_DrawText(14,10,"___________4x");
}
if (up==5)
{
ham_DrawText(14,10,"___________5x");
}
if (up>=6)
{
ham_DrawText(14,10,"mindestens 6x");
}


}
return 0;
}

falls du einen verbesserungsvorschlag hast, kannst du ihn aber natürlich posten.
Link ist offline   Mit Zitat antworten
Alt 07.10.2002, 15:51   #8
 
Registriert seit: 15.09.2002
Alter: 38

ToruX hat die Renommee-Anzeige deaktiviert

ToruX eine Nachricht über ICQ schicken
Standard

könnte von mir sein

siehe Source
ToruX ist offline   Mit Zitat antworten
Alt 07.10.2002, 16:49   #9
Ehemaliger Admin
 
Benutzerbild von hurik
 
Registriert seit: 27.12.2001
Ort: Konstanz
Alter: 37
Spielt gerade: Original Wars (PC, 2001) sack schwer ...

hurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannt

hurik eine Nachricht über ICQ schicken
Standard

so jetzt hatte ich zeit. dieser quellcode wird auch demnächst als tut erscheinen. tut zu interruppts.

hier das programm mit guten erklärungen. wenn was zu schelcht erklärt wird dazu schreiben werds besser versuchen!

// Standart Include Dateien.
#include "mygba.h"

// Prototyp für den Interrupt.
void VblFunc(void);

// Unsere globalen Variablen.
u8 button_a = 0; // Zählt die Anzahl der A-Tasten drücke.
u8 frames = 0; // Brauchen wir zum Steuern der Frequenz mit der man drücken kann.

// Die tolle main Schleife.
int main(void)
{
ham_Init(); // Wissen wir ...
ham_InitText(0); // Wissen wir auch ...

ham_DrawText(1,1,"A: %6d", button_a); // Selbsterklärend ...

// Interrupt anschalten
ham_StartIntHandler(INT_TYPE_VBL,&VblFunc);
/* Wir benutzten eine Interupt statt der Hauptschleife. Nackteile? Keine. Vorteile? Jo!
Nähmlich dieser Interrupt also der VBL wird 60 mal die Sekunde aufgerufen! Damit können
wir unser Programm sehr gut steuern. Über die Normale Programm schleife ist das sehr sehr
Aufwendig.*/

// Unsere leere Programmschleife ist nur da um das Programm beim laufen zu halten.
while(1)
{
}

}

// Unsere Interrupt Funktion wie gesagt wird 60 mal die Sekunde ausgeführt.
void VblFunc(void)
{
frames++; // Der Counter da 60 durchgänge die Sekudne immer noch zuviel sind zählen wir mit.

if( (frames%30) == 0) // Und lassen nur 2 mal die Sekunde eine Tastatur abfrage zu! Da diese Modulo Operation nur 2 mal 0 als Lösung hat. Das passiert nur bei jedem 30 Durchlauf.
{
if (F_CTRLINPUT_A_PRESSED) // Die Tastaturabfrage! Inhalt ist Selbsterklärend!
{
button_a++;
ham_DrawText(1,1,"A: %6d", button_a);
}

}

if(frames == 60)
frames = 0; // Wenn der Counter 60 hat wird er wieder 0 gesetzt. Wie gesagt das passiert 2 mal die Sekunde!
}
/*
Mann muss die Modulo Operation änder um die Frequenz zu ändern. Ich bin mir das Ist die beste Möglichkeit
die Geschwindigkeit seines Programm zu stern! ok Alle kapiert? noch fragen?

by andreas "hurik" giemza
webmaster@hurik.de
*/
hurik ist offline   Mit Zitat antworten
Alt 07.10.2002, 19:35   #10
ehem. Teammitglied
 
Benutzerbild von Vulnus
 
Registriert seit: 04.08.2002

Vulnus hat eine strahlende Zukunft
Vulnus hat eine strahlende ZukunftVulnus hat eine strahlende ZukunftVulnus hat eine strahlende ZukunftVulnus hat eine strahlende ZukunftVulnus hat eine strahlende ZukunftVulnus hat eine strahlende Zukunft

Standard

Zitat:
Mann muss die Modulo Operation änder um die Frequenz zu ändern. Ich bin mir das Ist die beste Möglichkeit
die Geschwindigkeit seines Programm zu stern! ok Alle kapiert? noch fragen?
Nunja,hüstel....das letzte stück nicht ganz.
Ist der stern getz nen intervall/die geschwindigkeit??
Ich wois ich bin a noob!
__________________
Nach müde kommt doof!
Vulnus ist offline   Mit Zitat antworten
Alt 07.10.2002, 19:47   #11
Ehemaliger Admin
 
Benutzerbild von hurik
 
Registriert seit: 27.12.2001
Ort: Konstanz
Alter: 37
Spielt gerade: Original Wars (PC, 2001) sack schwer ...

hurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannthurik ist jedem bekannt

hurik eine Nachricht über ICQ schicken
Standard

ok jo. also mit dem modulo operator (%) steuerst du die frequenz! also der modulo operator gibt von eienr division immer den rest an. wenn man 1 bis 60 durch 30 teilt kommt komtm 2 mal kein rest raus also 0. da der interrupt 60 mal die sekudne aufgerufen wird heist das das höchstens 2 mal die sekunde der wert erhöht wird. wenn du jetzt % 6 machst wird das ganze 10 mal aufgerufen. wenn du es durch 2,4 teilst wird alles 25 mal die sekunde aufgerufen und das ist ein optimaler wert für ein spiel! 25 frames die sekunde ist für den gba ok.

so noch fragen?
hurik ist offline   Mit Zitat antworten
Alt 09.10.2002, 14:31   #12
Tom männlich
 
Benutzerbild von Tom
 
Registriert seit: 08.10.2002
Alter: 35

Tom hat die Renommee-Anzeige deaktiviert

Standard

So müsste es am einfachsten gehen:


u16 USEDKEYS = *KEYS; // Praktisch eine Kopie des KEYS Registers von der letzten Schleife
u16 UP = 0;

while(1) //Hauptschleife
{

if ( !(((*KEYS) & USEDKEYS) & KEY_UP)) //Wenn die Taste das letzte mal gedrückt wurde, und noch immer gedrückt wird.
{
UP_FUNCTION();
}
elseif ( !((*KEYS) & KEY_UP) & (!(USEDKEYS & KEYUP)==0)) //Wenn die Taste das erstemal gedrückt wird
{
UP_FUNCTION();
UP++;
}

USEDKEYS = *KEYS; //Jetzt wird noch USEDKEYS aktualisiert, und fertig.

}
Tom ist offline   Mit Zitat antworten
Antwort

  portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Buttons für BBCode weg? Balmung Seiten- und Forumfeedback 2 02.11.2005 15:14
Druckempfindliche Buttons Leopardchen Hardware (PSP) 2 03.02.2005 16:44
Farbige Buttons? Tyrael Hardware (GBA) 13 14.04.2004 22:31


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:01 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0
Template-Modifikationen durch TMS
PortableGaming.de © bk 2000 - 2010

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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231