|
Verfasser |
Nachricht |
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: PSP C Anfang - Helft mir auf meinem weg
eben, soll ein text reader sein. wenn du 1/2 seiten vorher liest, siehste, dass ich einen eigenen kompilierbaren code hatte, nur die absätze gingen nicht. da hat hackman mir einen code gegeben, und ich versuchte ihn zu kompilieren, ohne ihn estmal ganz zu lesen und das ist dabei rausgekommen ^^ bin halt noch ein anfänger XD
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
09.11.2010 20:47 |
|
|
|
Ceikor
Ex-Developer
Beiträge: 581
Gruppe: User
Registriert seit: Dec 2008
Status:
Abwesend
Danke erhalten: 701
|
RE: PSP C Anfang - Helft mir auf meinem weg
Ja ok^^ hab auch schon den Fehler gefunden ging aber nicht. Kannst selber auch gerne versuchen setz den code von Hackman in der graphics.c über void initGraphics() am besten auch unter
void printTextScreen(int x, int y, const char* text, u32 color) dann wird es 100% gehen also das Compilieren der code nicht.
|
|
09.11.2010 20:54 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: PSP C Anfang - Helft mir auf meinem weg
So, habe die textreadersache erstmal seingelassen und versuche nun (einfach um zu gucken ob ichs hinbekomme) ein spiel, welches in PGE Lua ist, in C nachzucoden. das klappt bisher auch ganz gutm nur eine sache klappt nicht, und ich verstehe einfach nicht wiso. Also ich habe folgende Methode/Funktion
double analogausschlag(int x, int y){
if ((x-127.5)<0){x=(x-127.5)*(-1);}else{x=x-127.5;}
if ((y-127.5)<0){y=(y-127.5)*(-1);}else{y=y-127.5;}
if (x>y){return x;}else{return y;}
}
Dann wollte ich die funktion mit folgendem Code testen
sprintf(text,"analogx: %i",pad.Lx);
printTextScreen(11,30,text,rot);
sprintf(text,"analogy: %i",pad.Ly);
printTextScreen(11,40,text,rot);
sprintf(text,"analogausschlag: %d",analogausschlag(pad.Lx,pad.Ly));
printTextScreen(11,50,text,rot);
Die beiden ersten zeilen werden dabei absolut korrekt angezeigt (jeweils von 0-255), doch in der dritten zeile steht IMMER 0!. habe sogar mal einfach nur folgende funktion versucht (dann natürlich nur mit pad.Ly):
double analogausschlag(int y){
return y;
}
Und auch diese Funktion liefert immer 0, und dass obwohl die Analogstick koordinaten darüber korrekt angezeigt werden. Könnt ihr mir erklären wiso?
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
22.11.2010 20:14 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: PSP C Anfang - Helft mir auf meinem weg
Versuchs mal ganz einfach:
int analogausschlag(int x, int y) { if((x -127.5) < 0) x = (x - 127.5) * (-1); else x -= 127.5;
if((y-127.5) < 0) y = (y - 127.5) * (-1); else y -= 127.5; return (x > y) ? x : y; };
// BLAAAAAAAAAAAAAAAAAAAAAa
pspDebugScreenInit();
SceCtrlData pad; memset(&pad, 0, sizeof(SceCtrlData));
while(pad.Buttons != PSP_CTRL_BLAAAA) { sceCtrlReadBufferPositive(&pad, 1);
pspDebugScreenPrintf("lx: %d\nly: %d\nanalogaustausch: %d", pad.Lx, pad.Ly, analogaustausch(pad.Lx, pad.Ly); pspDebugScreenSetXY(0, 0); };
//EDIT: Warum gibts du auch einen double anstatt einen Integer Wert zurück !?
Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2010 20:36 von HacKmaN.
|
|
22.11.2010 20:30 |
|
Folgende User bedanken sich: |
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: PSP C Anfang - Helft mir auf meinem weg
Ok, ich versuchs mal.
was genau macht diese zeile (sie kommt in meinem code nicht vor):
memset(&pad, 0, sizeof(SceCtrlData));
und wozu diese zeile:
pspDebugScreenSetXY(0, 0);
EDIT: ich wollte es als double zurückgeben, da es sich beim rückgabewert nicht um eine ganze zahl handelt
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2010 20:50 von Neutrosider.
|
|
22.11.2010 20:49 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: PSP C Anfang - Helft mir auf meinem weg
Ok, ich versuchs mal.
was genau macht diese zeile (sie kommt in meinem code nicht vor):
memset(&pad, 0, sizeof(SceCtrlData));
und wozu diese zeile:
pspDebugScreenSetXY(0, 0);
EDIT: ich wollte es als double zurückgeben, da es sich beim rückgabewert nicht um eine ganze zahl handelt
Oh, sry dass mit der ganzen Zahl hab ich nicht gesehen.
Dass memset überschreibt n bytes von der Adresse im ersten Argument mit dem 32-Bit Wert im 2. Argument. Es überschreibt also im Code oben die pad Struktur mit Null (für den Fall dass zufällig irgendein scheiß in der struktur steht).
Die Zeile pspDebugScreenSetXY setzt, wie der Name schon sagt die x und y Koordinate des DebugScreens. Ansonsten würden dauernd neue Zeilen erstellt werden, wie es in Terminalen der Fall ist.
|
|
22.11.2010 21:11 |
|
Folgende User bedanken sich: |
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: PSP C Anfang - Helft mir auf meinem weg
ok, ich habe zuerst einfach deine version probiert->Klappt auf anhieb. dann wollte ich aber wissen woran genau es lag, dass es nicht funktioniert hat. das ergebnis:
wenn ich komplett meine version nehme und als rückgabetyp der funktion int setze, klappts, sprich es liegt nur am rückgabetyp, was finde ich sehr seltsam ist. Ich werde dennoch deine version nehemen, da es codemäßig einfach besser aussieht
kannst du dir erklären warum es nur am rückgabetyp liegt und warum double nicht geht??
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
22.11.2010 21:19 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: PSP C Anfang - Helft mir auf meinem weg
ok, ich habe zuerst einfach deine version probiert->Klappt auf anhieb. dann wollte ich aber wissen woran genau es lag, dass es nicht funktioniert hat. das ergebnis:
wenn ich komplett meine version nehme und als rückgabetyp der funktion int setze, klappts, sprich es liegt nur am rückgabetyp, was finde ich sehr seltsam ist. Ich werde dennoch deine version nehemen, da es codemäßig einfach besser aussieht
kannst du dir erklären warum es nur am rückgabetyp liegt und warum double nicht geht??
Vllt funktioniert die implizite dateiumwandlung nicht richtig. Versuchs mal mit
Ansonsten kannst du es ja mal mit nem float versuchen, dass ist wenigstens genauso groß wie ein Integer.
|
|
22.11.2010 21:35 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: PSP C Anfang - Helft mir auf meinem weg
gut ich versuchs. dann zu meiner nächsten nicht funktionierenden funktion. die soll aus einem x und einem y wert einen winkel machen und sieht so aus:
int analogangle(int x, int y){
return sinh((y-127.5)/analogausschlag(x,y));
}
doch sie liefert leider immer nur 3 werte:
- analogstick im oberen bereich -> -1
- analogstik im mittleren bereich -> 0
- analogstick im unteren bereich -> 1
wiso?
Ons mit der tpyenumwandlung klappt sag ich dir gleich.
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
22.11.2010 21:38 |
|
|
|
HacKmaN
Ex-Developer
Beiträge: 2.423
Gruppe: User
Registriert seit: Oct 2009
Status:
Offline
Danke erhalten: 3319
|
RE: PSP C Anfang - Helft mir auf meinem weg
gut ich versuchs. dann zu meiner nächsten nicht funktionierenden funktion. die soll aus einem x und einem y wert einen winkel machen und sieht so aus:
int analogangle(int x, int y){
return sinh((y-127.5)/analogausschlag(x,y));
}
doch sie liefert leider immer nur 3 werte:
- analogstick im oberen bereich -> -1
- analogstik im mittleren bereich -> 0
- analogstick im unteren bereich -> 1
wiso?
Ons mit der tpyenumwandlung klappt sag ich dir gleich.
Da kann ich dir leider nicht helfen, mit Sachen wie Winkelfunktionen kenn ich mich überhaupt nicht aus
|
|
22.11.2010 21:40 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: PSP C Anfang - Helft mir auf meinem weg
ok, float klappt, aber schinbar liefert die funktion doch nur ganze werte, daher bleibe ich zumindest bei dieser funktion bei int.
gut, dann versuche ich das winkelproblem selbst zu lösen (mathe war schon immer meine stärke ^^), ich gebe bescheid wenns geklappt hat (und wie^^)
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
22.11.2010 21:47 |
|
|
|
pspbricker
Mod a.D.
Beiträge: 3.428
Gruppe: User
Registriert seit: May 2008
Status:
Offline
Danke erhalten: 1641
|
RE: PSP C Anfang - Helft mir auf meinem weg
Wieso soviele Gedanken wenn es auch einfacher geht ?
float pgeControlsAnalogAngle(void)
{
if(!enabled)
return 0;
float x = (float)128.0f - (pad.analog.x + 128.0f);
if(x == 0.0f)
x = 1.0f;
float y = (float)128.0f - (pad.analog.y + 128.0f);
if(y == 0.0f)
y = 1.0f;
float theta = 0.0f;
if(y >= 0.0f && x > 0.0f)
theta = pgeMathAtan(y/x);
else if(y >= 0.0f && x < 0.0f)
theta = -pgeMathAtan(y/-x)-PGE_CONTROLS_PI;
else if(y <= 0.0f && x > 0.0f)
theta = -pgeMathAtan(-y/x);
else if(y <= 0.0f && x < 0.0f)
theta = pgeMathAtan(-y/-x)-PGE_CONTROLS_PI;
theta -= (PGE_CONTROLS_PI * 0.5f);
theta += 2 * PGE_CONTROLS_PI;
return theta;
}
aus: http://svn.luaplayer.org/pge/pgeControls.c
Musst nur noch die Variablen Namen anpassen .
pspDebugScreenPrintf("lx: %d\nly: %d\nanalogaustausch: %d", pad.Lx, pad.Ly, analogaustausch(pad.Lx, pad.Ly);
Es ist klar, dass nur eine Ganze Zahl zurück kommt. Da man mit %d die Ints ausgibt. Mit %f dagegen die Fließkomma Zhalen (Float, double).
http://tutorials.at/c/03-dateneingabe-ausgabe.html
Meine PS3 Games : Warhawk , NFS: Pro Street, Motorstorm ,Midnight Club LA, LittleBigPlanet, GTA4, Uncharted 2, Overlord, Killzone2, PES10, Battlefield ´43, Socom: Confrontation,
Forum Regeln Beachten! KEIN ISO Talk! KEINE Beleidigungen! KEINE illegalen Links!
Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2010 21:53 von pspbricker.
|
|
22.11.2010 21:50 |
|
Folgende User bedanken sich: |
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: PSP C Anfang - Helft mir auf meinem weg
hatte die floats mit %f ausgegeben, gab dennoch nur ganze zahlen (nur halt mit .0000 dran.) und die sache mit dem pge source: GEIL! das hätte ich viel früher schon gebrauche können, DANKE!
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
Dieser Beitrag wurde zuletzt bearbeitet: 22.11.2010 21:58 von Neutrosider.
|
|
22.11.2010 21:57 |
|
|
|
anmabagima
Ex-Developer
Beiträge: 348
Gruppe: User
Registriert seit: Dec 2009
Status:
Offline
Danke erhalten: 530
|
RE: PSP C Anfang - Helft mir auf meinem weg
Nur eine kleine Randbemerkung:
auf der PSP bitte immer nur floats (single precision) verwenden. double (also double precision float) ist als internen Datentyp auf der PSP nicht unterstützt. Da generiert der Compiler dann pseudo-code um das irgendwie zu handeln --> LANGSAM! Also immer float's... auf der PSP
|
|
23.11.2010 09:12 |
|
Folgende User bedanken sich: |
|
|