İsimyoktur
Decapat
- Katılım
- 2 Mayıs 2022
- Mesajlar
- 10
Daha fazla
- Cinsiyet
- Erkek
Arkadaşlar bu PSX oyun yapımına merak saldım ve Windows XP üzeriden birkaç şey kodladım ama kodu CMD de derlerken hata alıyorum ve asla düzeltemiyorum. Nasıl düzelebilir?
Sırasıyla MAIN.C ve Makefile.mak dosyasını aşağıya bıraktım.
Psymake kodunu yazarak aldığım hata ise " fatal error: Don't know how to Build target C:\psyq\projects\redbox\ALL."
Kodu çalıştırdığımda neden dolayı bilmiyorum ama C:\psyq\projects\redbox\ALL. yoluna gitmeye çalışıyor ama böyle bir yol yok ve olmaması lazım.
Ve MAIN.EXE dosyasını oluştuması lazım.
Sırasıyla MAIN.C ve Makefile.mak dosyasını aşağıya bıraktım.
Psymake kodunu yazarak aldığım hata ise " fatal error: Don't know how to Build target C:\psyq\projects\redbox\ALL."
Kodu çalıştırdığımda neden dolayı bilmiyorum ama C:\psyq\projects\redbox\ALL. yoluna gitmeye çalışıyor ama böyle bir yol yok ve olmaması lazım.
Ve MAIN.EXE dosyasını oluştuması lazım.
C++:
/******************************************************************************
* MAIN.C - Beyaz zemin üzerinde kırmızı kare (D-Pad kontrolü)
* Psy-Q (SN Systems) örnek.
******************************************************************************/
#include <sys/types.h>
#include <libgte.h>
#include <libgpu.h>
#include <libetc.h>
// Ekran boyutu.
#define SCREEN_W 320.
#define SCREEN_H 240.
// Ordering Table boyutu.
#define OT_LENGTH 1
// Ordering Table ve GPU paket alanı.
GsOT ot[OT_LENGTH];
GsOT_TAG ot_tag[1 << OT_LENGTH];
PACKET gpu_packet[16];
// Kırmızı kutunun pozisyonu.
int boxX = 100;
int boxY = 100;
int boxSize = 30;
// Prototipler.
void initGraphics(void);
void drawRedBox(int x, int y, int size);
int main() {
// Grafik başlat.
initGraphics();
// Pad'i başlat.
InitPAD(0, 0, 0, 0);
StartPAD();
ChangeClearPAD(0);
while (1) {
// OT temizle.
ClearOTagR((u_long*)ot[0].ot, 1 << OT_LENGTH);
// Pad okuyalım.
// libetc.h fonksiyonu: Poll ve pad butonlarını al.
PADTYPE p = PadRead(0);
if (!(p & PADLup)) { boxY -= 2; if(boxY < 0) boxY = 0; }
if (!(p & PADLdown)) { boxY += 2; if(boxY > SCREEN_H - boxSize) boxY = SCREEN_H - boxSize; }
if (!(p & PADLleft)) { boxX -= 2; if(boxX < 0) boxX = 0; }
if (!(p & PADLright)){ boxX += 2; if(boxX > SCREEN_W - boxSize) boxX = SCREEN_W - boxSize; }
// Kırmızı kutuyu çiz.
drawRedBox(boxX, boxY, boxSize);
// Ekrana gönder.
DrawSync(0);
VSync(0);
GsSwapDispBuff();
GsSortClear(255, 255, 255); // Arka planı beyaz.
GsDrawOt(&ot[0]);
}
return 0;
}
// ----------------------------------------------------------
// Basit grafik init - 320x240 çözünürlük, double-buffer
// ----------------------------------------------------------
void initGraphics(void) {
ResetGraph(0);
SetDefDrawEnv(&GsDrawEnv, 0, 0, SCREEN_W, SCREEN_H);
SetDefDispEnv(&GsDispEnv, 0, 0, SCREEN_W, SCREEN_H);
// Double buffer.
GsDrawEnv.isbg = 1; // Arka plan temizleme.
GsDrawEnv.r0 = 255; // Beyaz R
GsDrawEnv.g0 = 255; // Beyaz G
GsDrawEnv.b0 = 255; // Beyaz B
PutDrawEnv(&GsDrawEnv);
PutDispEnv(&GsDispEnv);
// OT hazırla.
GsClearOt(0, 0, &ot[0]);
GsSetWorkBase((PACKET*)gpu_packet);
GsClearWorkBase();
GsSetVideoMode(VID_MODE_PAL); // Veya VID_MODE_NTSC.
SetDispMask(1);
}
// ----------------------------------------------------------
// drawRedBox : Kırmızı renkli POLY_F4 çizer.
// ----------------------------------------------------------
void drawRedBox(int x, int y, int size) {
POLY_F4* poly = (POLY_F4*)GsGetWorkBase();
GsSetWorkBase((PACKET*)((u_long)poly + sizeof(POLY_F4)));
setPolyF4(poly);
setXY4(poly,
x, y,
x+size,y,
x, y+size,
x+size,y+size);
setRGB0(poly, 255,0,0); // Kırmızı.
setShadeTex(poly, 0);
AddPrim(&ot[0], poly);
}
C++:
all : MAIN.EXE
MAIN.EXE : MAIN.OBJ
C:\PSYQ\BIN\CCPSX.EXE MAIN.OBJ -o MAIN.EXE \
C:\PSYQ\LIB\LIBETC.LIB C:\PSYQ\LIB\LIBGTE.LIB \
C:\PSYQ\LIB\LIBGPU.LIB C:\PSYQ\LIB\LIBSPU.LIB
MAIN.OBJ : MAIN.C
C:\PSYQ\BIN\CCPSX.EXE -c -Xo2 -G0 MAIN.C
clean :
del MAIN.OBJ
del MAIN.EXE
Son düzenleme: