Ich hatte erst ein anderes Topic, aber ich hab die L?sung fast schon gefunden, darum editiere ich hier mal.
Und zwar hab ich eine Funktion, an welche auch negative Parameter ?bergeben werden sollen.
Ich seh nur grad nicht, warum das nicht geht.
a=-5737356
b=24
Function bla: a, b
blub
EndFunction
der negative wert wird nicht ?bernommen, sondern 0.
habs mit % # probiert, geht nicht.
innerhalb der function kommen sonst bei float noch komischere werte raus.
wenns jemanden interessiert, hier der code.ein bb like shr.
FUNCTION xShr:FA,FV
LOCAL ICount%
LOCAL IByte1%= bAND(FA/0x1000000, 0xFF)
LOCAL IByte2%= bAND(FA/0x10000, 0xFF)
LOCAL IByte3%= bAND(FA/0x100, 0xFF)
LOCAL IByte4%= bAND(FA/0x1, 0xFF)
LOCAL ITemp1%
LOCAL ITemp2%
LOCAL ITemp3%
FOR ICount=1 TO FV
ITemp1=bAND(IByte1, 0x1)*0x80
ITemp2=bAND(IByte2, 0x1)*0x80
ITemp3=bAND(IByte3, 0x1)*0x80
IByte1=(IByte1/2)
IByte2=(IByte2/2)+ITemp1
IByte3=(IByte3/2)+ITemp2
IByte4=(IByte4/2)+ITemp3
NEXT
RETURN IByte1*0x1000000+IByte2*0x10000+IByte3*0x100+IByte4*0x1
ENDFUNCTION
Geht!
Nich mein Fehler.
a=-5737356
b=24
bla(a,b)
bla(-a, -b)
KEYWAIT
FUNCTION bla: a, b
STDOUT "a:"+a+" b:"+b+"\n"
ENDFUNCTION
Warum machst Du als Parameter nicht % dran? Du willst ja Integer haben.
es h?ngt mit negativen zahlen und bAND zusammen, muss das wohl Inline machen...
Ich als c++ noob.
Zwei Fragen.
Eine Funktion mit standardparameter?bergabe nach inline weitergeben und noch ein anderer fehler.
hier der code, please help....
FUNCTION xTestRendered: xPoint,yPoint,alphaLevel=0,loc=0
INLINE
int res;
sFI_TestType typ;
FI_Test.Result=typ.Result;
FI_Test.ProjectedX=typ.ProjectedX;
FI_Test.ProjectedY=typ.ProjectedY;
FI_Test.RectX=typ.RectX;
FI_Test.RectY=typ.RectY;
FI_Test.RectU=typ.RectU;
FI_Test.RectV=typ.RectV;
FI_Test.TextureX=typ.TextureX;
FI_Test.TextureY=typ.TextureY;
FI_Test.Texture=typ.Texture;
FI_Test.Frame=typ.Frame;
FI_Test.Reserved1=typ.Reserved1;
if (wrap_xTestRendered(xPoint, yPoint, loc, &typ, 1)) && alphaLevel>0 && FI_Test.Texture!=0){
if ( (xReadPixel(FI_Test.TextureX, FI_Test.TextureY, xTextureBuffer(FI_Test.Texture,FI_Test.Frame))>>24)<alphaLevel ) {
FI_Test.Result = 0;
}
}
return(FI_Test.Result);
ENDINLINE
ENDFUNCTION
bzwweise w?re mir das ergebnis eines signed right bitshiftung ala ASR ausreichend.
Meine werte stimmen nie.
ein einfaches A >> B; geht da ja nicht.
Inline kannst du "Bitshifting" machen ... versteh das Problem nicht...
FUNCTION xTestRendered: xPoint,yPoint,alphaLevel=0,loc=0
INLINE
int res;
sFI_TestType typ;
FI_Test.Result=typ.Result;
FI_Test.ProjectedX=typ.ProjectedX;
FI_Test.ProjectedY=typ.ProjectedY;
FI_Test.RectX=typ.RectX;
FI_Test.RectY=typ.RectY;
FI_Test.RectU=typ.RectU;
FI_Test.RectV=typ.RectV;
FI_Test.TextureX=typ.TextureX;
FI_Test.TextureY=typ.TextureY;
FI_Test.Texture=typ.Texture;
FI_Test.Frame=typ.Frame;
FI_Test.Reserved1=typ.Reserved1;
if (wrap_xTestRendered(xPoint, yPoint, loc, &typ, 1)) && (int)alphaLevel>0 && FI_Test.Texture!=0){
if ( (xReadPixel(FI_Test.TextureX, FI_Test.TextureY, xTextureBuffer(FI_Test.Texture,FI_Test.Frame))>>24)<alphaLevel ) {
FI_Test.Result = 0;
}
}
return(FI_Test.Result);
ENDINLINE
ENDFUNCTION
kommt immer noch diese fehlermeldung:
IncrediBuild skips: test1.gbas, GetImageInfo.gbas, Read_Funktionen.gbas, xwrap.gbas,
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp: In function `DGInt __GLBASIC__::xTestRendered(DGInt, DGInt, DGInt, DGInt)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:1367: error: expected identifier before '(' token
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:1367: error: expected `;' before '(' token
problem ist dass das SHR bei bb bei nem negativen decimalwert immer das erste bit der umgewandelten bin?rzahl als 1 kennzeichnet, dass muss das rausgefiltert werden, dessen stelle in 0 gewandelt, und hinterher 1 dazu und nen minus davor, wenn der wert negativ war.
so wurde mir das erkl?rt.
oder versuch einfach bei fastimage das TestRendered nachzubauen.
wo hast du FI_Test deklariert?
EDIT:
if (wrap_xTestRendered(xPoint, yPoint, loc, &typ, 1)) && (int)alphaLevel>0 && FI_Test.Texture!=0){
muss sein:
if (wrap_xTestRendered(xPoint, yPoint, loc, &typ, 1) && (int)alphaLevel>0 && !FI_Test.Texture){
Pass blo? bei C++ auf!
Mach bitte bitte erstmal das Grundlegende durch, bevor du hier wild Rumjonglierst.
Wird sehr schnell frust draus!
weiter oben nat?rlich:
struct sFI_TestType{
int Result,ProjectedX,ProjectedY;
int RectX,RectY;
float RectU,RectV;
int TextureX,TextureY,Texture;
int Frame,Reserved1;
};
und den normalen type nat?rlich auch
post dr?ber!
habs ge?ndert, kommt nun
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp: In function `DGInt __GLBASIC__::xTestRendered(DGInt, DGInt, DGInt, DGInt)':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:1367: error: non-lvalue in assignment
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp1.cpp:1368: error: invalid operands of types `DGInt' and `int' to binary `operator>>'
ich w?rd kein c++ machen wenns nicht sein muss.
das testrendered wenn alphalevel 0 ist, pr?ft auf kontakt mit dem image bzw. der texture, wenn man alphalevel aber als 128 angibt, dann gibts erst kontakt wenn der tats?chlich sichtbare bereich ber?hrt wird.
das normale hab ich seit tagen, nur an dem alphalevel mist sitz ich die ganze zeit, wenn das nicht w?re, h?tt ich Fastimage sicher schon allein fertig bekommen, der rest ist nicht mehr schwer, will aber erst das fertig machen.
und wu?te halt erst nicht, da? das bitshifting bei bb halt anders ist.
glb kommt da standard nicht mit negativen werten klar.
edit: das ! warum kommt das nun woanders hin, bei dem FI c++ header ists da wo es stand, grins.
auch ne art c++ zu lernen, oder?lol