|
Verfasser |
Nachricht |
PSP_Lord
Durchstarter
Beiträge: 87
Gruppe: User
Registriert seit: Sep 2010
Status:
Abwesend
Danke erhalten: 133
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
"static declaration of 'function_X' follows non-static declaration" tritt immer dann auf, wenn eine Funktion als "static" deklariert wird, sie aber vorher bereits aufgerufen wird. "Static" limitiert die Sichtweite der Funktion, d.h. die Funktion ist erst ab dem Ort ihrer Deklaration/Definition bekannt.
Beispiel:
int foo() {
bar();
return 0;
}
static void bar() {
//blah
}
Dies wird obigen Fehler erzeugen, da die Funktion "bar" als "static" definiert ist und somit erst ab dem Ort ihrer Definition/Deklaration bekannt ist. Da es hier keine Deklaration von bar() gibt und die Definition von "bar" unterhalb von "foo" stattfindet, kennt "foo" "bar" nicht.
Es gibt zwei Lösungen dafür:
1) Wir deklarieren Bar() am Anfang des Files:
static void bar();
int foo() {
bar();
return 0;
}
static void bar() {
//blah
}
2) Wir definieren bar() bevor wir bar() aufrufen
static void bar() {
//blah
}
int foo() {
bar();
return 0;
}
Ich hoffe, diese Beschreibung hat euch diesen Fehler erklärt. Updatet einmal euer PSPSDK auf die neueste Version: http://sourceforge.net/projects/minpspw/
Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2011 17:23 von PSP_Lord.
|
|
06.09.2011 15:05 |
|
Folgende User bedanken sich: |
|
taipangr
Legende
Beiträge: 1.444
Gruppe: User
Registriert seit: Jul 2011
Status:
Offline
Danke erhalten: 397
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
Tut mir Leid aber ich würde das nicht verstehen.Ich kann es bereits.
You must remember that tomorrow comes after the dark
so you will be always in my heart with unconditional love.
|
|
06.09.2011 15:38 |
|
|
|
PSP_Lord
Durchstarter
Beiträge: 87
Gruppe: User
Registriert seit: Sep 2010
Status:
Abwesend
Danke erhalten: 133
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
Wärest du so freundlich mir mitzuteilen, was du an der Beschreibung nicht verstehst?
|
|
06.09.2011 15:44 |
|
|
|
Vault_11
Durchstarter
Beiträge: 66
Gruppe: User
Registriert seit: Aug 2011
Status:
Offline
Danke erhalten: 3
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
Ja das oben wäre ja ganz hilfreich wenn ich iwas deklariert hätte, aber ich habe ja jetzt überhaupt nichts in der Main.c stehen. Also nur die int main(void) {}, und in ihr das dass es zum laufen bringt. Also wie beim Hello World Programm. Wenn ich jetzt jedoch die png.h lösche verschwinden alle Fehler. Also liegts nur an der inkludierung. Warsch sind in dem Headerpacket von PspProgramming nicht alle nötigen Dateien vorhanden.
Aber es ist schon faszinierend das bisjezt nichts geklappt hat was iwo in einem Tut stand was mit C Programmierung für die PSP zu tun hatte. Als ob es 100 verschiedene Möglichkeiten gibt und nur die Kompination stimmen muss.
|
|
06.09.2011 16:27 |
|
|
|
dark-awesome
stehn
Beiträge: 3.204
Gruppe: Banned
Registriert seit: Jul 2010
Status:
Offline
Danke erhalten: 2192
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
Also ich weis net was ihr hab bei mir geht alles ohne Probleme.
|
|
06.09.2011 17:16 |
|
|
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
PSP 3004, FW 6.6
|
|
06.09.2011 17:40 |
|
|
|
Vault_11
Durchstarter
Beiträge: 66
Gruppe: User
Registriert seit: Aug 2011
Status:
Offline
Danke erhalten: 3
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
@ Vault_11
Vielleicht helfen einige Code-Beispiele: http://psp.dashhacks.com/category/12
Ich kann ja nix coden da immer der Fehler angezeigt wird. Egal was ich reinschreib, und auch sogar wenn ich garnix schreib, immer der selbe Fehler. Und nach dem Tut hier müsst es eig. klappen.
|
|
06.09.2011 17:51 |
|
|
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
@ Vault_11
Nix selber coden, sondern nur mal testen, ob sich die C-Code-Beispiele (mit Makefile) überhaupt kompilieren lassen. Wenn's funzt, kannste dich an den Headerdateien und der Programmstruktur orientieren.
PSP 3004, FW 6.6
|
|
06.09.2011 20:45 |
|
|
|
Vault_11
Durchstarter
Beiträge: 66
Gruppe: User
Registriert seit: Aug 2011
Status:
Offline
Danke erhalten: 3
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
@ Vault_11
Nix selber coden, sondern nur mal testen, ob sich die C-Code-Beispiele (mit Makefile) überhaupt kompilieren lassen. Wenn's funzt, kannste dich an den Headerdateien und der Programmstruktur orientieren.
Ich habe schon etliche Programme kompiliert, und alle gingen auch. Wenn ich den png.h Header lösche sind die Fehlermeldungen weg, also muss es an ihm liegen. Welche anderen Möglichkeiten gibt es denn um ein Bild darzustellen?
|
|
07.09.2011 22:20 |
|
|
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
PSP 3004, FW 6.6
|
|
08.09.2011 08:49 |
|
|
|
Vault_11
Durchstarter
Beiträge: 66
Gruppe: User
Registriert seit: Aug 2011
Status:
Offline
Danke erhalten: 3
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
http://www.psp-programming.com/tutorials/c/lesson04.htm
Lies dir doch bitte erstmal meine Posts durch und dann poste iwas.
|
|
08.09.2011 10:56 |
|
|
|
Neutrosider
Developer
Beiträge: 2.442
Gruppe: Developer
Registriert seit: Feb 2010
Status:
Offline
Danke erhalten: 2325
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
ich denke du hast einfach die libpng und die zlib nicht richtig installiert. beides ist voraussetzung, um mit der graphics.h arbeiten zu können
GEGEN ACTA, SOPA UND PIPA!
was sind ACTA, SOPA und PIPA?
Infos dazu hier (video), hier (video) und hier (website)
|
|
08.09.2011 11:09 |
|
|
|
knopper
Halbprofi
Beiträge: 135
Gruppe: User
Registriert seit: Apr 2010
Status:
Offline
Danke erhalten: 58
|
RE: [TUT] Die Graphics.h zur spiele Programmierung verwenden!
Hab das TUT mal ausprobiert. So wie beschrieben, funzt es auch bei mir leider nicht.
Erst nachdem die "PSP_MODULE_INFO"-Zeile hinzugefügt und im Makefile "- pspgum" durch "- lpspgum" ersetzt wurde, läßt sich die Datei richtig kompilieren und auch starten.
Der Vollständigkeit halber wurde noch die Bewegung der Y-Achse und eine Analog-Pad Steuerung hinzugefügt:
#include <pspdisplay.h>
#include <pspctrl.h>
#include <pspkernel.h>
#include <pspdebug.h>
#include <pspgu.h>
#include <png.h>
#include <stdio.h>
#include "graphics.h"
#define printf pspDebugScreenPrintf
#define black 0xFF000000
PSP_MODULE_INFO("My first game", 0, 1, 0);
/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
sceKernelExitGame();
return 0;
}
/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
int cbid;
cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
sceKernelRegisterExitCallback(cbid);
sceKernelSleepThreadCB();
return 0;
}
/* Sets up the callback thread and returns its thread id */
int SetupCallbacks(void) {
int thid = 0;
thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, 0, 0);
if(thid >= 0) {
sceKernelStartThread(thid, 0, 0);
}
return thid;
}
int main() {
pspDebugScreenInit();
SetupCallbacks();
initGraphics();
SceCtrlData pad;
sceCtrlSetSamplingCycle(0);
sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
Image* Figur;
Image* Hintergrund;
Figur = loadImage("Figur.png");
Hintergrund = loadImage("Hintergrund.png");
int FigurPosX = 0;
int FigurPosY = 55;
while(1) {
sceCtrlReadBufferPositive(&pad, 1);
sceDisplayWaitVblankStart();
// Analog Pad Steuerung, erhöht und vermindert die X und Y_Position der Figur
if ((pad.Lx <= 0) && (FigurPosX > 0)) {FigurPosX-=5;} // Analog Pad links, X_Position-5
if ((pad.Lx >= 255) && (FigurPosX < 450)) {FigurPosX+=5;} // Analog Pad rechts, X_Position+5
if ((pad.Ly <= 0) && (FigurPosY > 0)) {FigurPosY-=5;} // Analog Pad oben, Y_Position-5
if ((pad.Ly >= 255) && (FigurPosY < 215)) {FigurPosY+=5;} // Analog Pad unten, Y_Position+5
if(pad.Buttons != 0) {
//Hier wird die X_Position der Figur erhöht oder vermindert und anschließend der
//Bildschirm-Inhalt gelöscht, damit sich die Bilder nicht überlagern.
if((pad.Buttons & PSP_CTRL_LEFT) && (FigurPosX != 0)) { //FigurPosX != 0 ist die Kollision, damit man
//nicht über den Bildschirmrand laufen kann
FigurPosX-=5;
clearScreen(black);
}
if((pad.Buttons & PSP_CTRL_RIGHT) && (FigurPosX != 450)) { //warum "FigurPosX != 450" und nicht 480 ?
//Weil die Figur eine Pixel-Breite von 30px
//hat. Also 480 - 30 = 450
FigurPosX+=5;
clearScreen(black);
}
//Hier wird die Y_Position der Figur erhöht oder vermindert, anschließend der Bildschirm-Inhalt
//gelöscht, damit sich die Bilder nicht überlagern.
if((pad.Buttons & PSP_CTRL_UP) && (FigurPosY != 0)) { //FigurPosY != 0 ist die Kollision, damit man
//nicht über den Bildschirmrand laufen kann.
FigurPosY-=5;
clearScreen(black);
}
if((pad.Buttons & PSP_CTRL_DOWN) && (FigurPosY != 215)) { //warum "FigurPosY != 215" und nicht 272 ?
//Weil die Figur eine Pixel-Hoehe von 60px
//hat. Also 272 - 60 = 212 (sollte aber 215
//sein, ist besser durch 5 teilbar)
FigurPosY+=5;
clearScreen(black);
}
}
//Syntax zum Anzeigen eines Bild: blitAlphaImageToScreen( XY Position im Bildfeld, Bildgröße, Image*,
//Position auf dem Bildschirm);
blitAlphaImageToScreen( 0, 0, 480, 272, Hintergrund, 0, 0);
//Code wird immer von oben nach unten gelesen, daher muss der Hintergrund vor der Figur
//positioniert werden
blitAlphaImageToScreen( 0, 0, 30, 60, Figur, FigurPosX, FigurPosY);
//Bildschirmanzeige
flipScreen();
}
sceKernelExitGame();
return 0;
}
http://s9.postimage.org/9p72stukb/Figur.png
http://s8.postimage.org/hjfy2yj91/Hintergrund.png
Und hier noch ein kleines Beispiel für die Spieleprogrammierung mit der „graphics.h“, bei dem die Grafiken nicht wie üblich vom Speicherstick nachgeladen, sondern als Header-Dateien verwendet werden:
SourceCode Download: sge20psp13.zip
Das geht eigentlich ganz einfach. Zunächst die Bilddateien mit einem Grafikprogramm ins PNG-Format speichern. Anschließend mit der DOS-Software „bin2c.exe“ (Google) die PNG-Dateien in Hexcode umwandeln.
Beispiel: bin2c.exe bildx.png bildx.h <RETURN>
Wer nicht genau weiß, wie man die „bildx.h“ zur weiteren Verwendung anpasst, sollte hier weiterlesen:
Sollte das DOS-Programm die Ausgabedatei in „bildx_png.h“ umbenennen, dann einfach wieder ändern.
„bildx.h“ mit einem Editor öffnen, und die am Anfang stehenden drei Raute-Einträge:
#ifndef __....
#define __....
#define ....
wie auch die unterste, allerletzte Zeile:
löschen.
Dann gibt’s noch die static-Zeile:
static unsigned char BILDX_PNG_DATA [BILDX_PNG_DATA_SIZE] =
die wie folgt geändert werden sollte:
static unsigned char bildx [] =
Unbedingt auf Groß/Kleinschreibung achten! Auch bei den Dateibezeichnungen.
„bildx.h“ speichern. Fertig.
'bildx.h' als Headerdatei im Programmcode eintragen. Mit nur 4 Zeilen ist die Grafik auf dem Bildschirm zu realisieren:
#include "bildx.h" //Headerdatei
Image * ibildx; //Image- und
ibildx = loadImageMemory(bildx, sizeof(bildx)); //Bildspeichergröße deklarieren
blitImageToScreen(0, 0, 480, 272, ibildx, 0, 0); //Bildausgabe
Das funktioniert natürlich auch mit mehreren Headerdateien, oder einer größeren Datei, aus der verschiedene Bildbereiche gelesen werden.
PSP 3004, FW 6.6
Dieser Beitrag wurde zuletzt bearbeitet: 23.03.2013 16:19 von knopper.
|
|
09.09.2011 13:36 |
|
Folgende User bedanken sich: |
|
|