mirror of https://github.com/axmolengine/axmol.git
Merge pull request #11451 from WenhaiLin/v3-jni-string
Fixed JNI illegal start byte error
This commit is contained in:
commit
c7e41e1045
|
@ -88,7 +88,7 @@ public:
|
|||
{
|
||||
JniMethodInfo methodInfo;
|
||||
if (! JniHelper::getStaticMethodInfo(methodInfo, "org/cocos2dx/lib/Cocos2dxBitmap", "createTextBitmapShadowStroke",
|
||||
"(Ljava/lang/String;Ljava/lang/String;IIIIIIIIZFFFFZIIIIF)Z"))
|
||||
"([BLjava/lang/String;IIIIIIIIZFFFFZIIIIF)Z"))
|
||||
{
|
||||
CCLOG("%s %d: error to get methodInfo", __FILE__, __LINE__);
|
||||
return false;
|
||||
|
@ -111,10 +111,12 @@ public:
|
|||
* and data.
|
||||
* use this approach to decrease the jni call number
|
||||
*/
|
||||
jstring jstrText = methodInfo.env->NewStringUTF(text);
|
||||
int count = strlen(text);
|
||||
jbyteArray strArray = methodInfo.env->NewByteArray(count);
|
||||
methodInfo.env->SetByteArrayRegion(strArray, 0, count, reinterpret_cast<const jbyte*>(text));
|
||||
jstring jstrFont = methodInfo.env->NewStringUTF(fullPathOrFontName.c_str());
|
||||
|
||||
if(!methodInfo.env->CallStaticBooleanMethod(methodInfo.classID, methodInfo.methodID, jstrText,
|
||||
if(!methodInfo.env->CallStaticBooleanMethod(methodInfo.classID, methodInfo.methodID, strArray,
|
||||
jstrFont, textDefinition._fontSize, textDefinition._fontFillColor.r, textDefinition._fontFillColor.g,
|
||||
textDefinition._fontFillColor.b, textDefinition._fontAlpha,
|
||||
eAlignMask, nWidth, nHeight,
|
||||
|
@ -126,7 +128,7 @@ public:
|
|||
return false;
|
||||
}
|
||||
|
||||
methodInfo.env->DeleteLocalRef(jstrText);
|
||||
methodInfo.env->DeleteLocalRef(strArray);
|
||||
methodInfo.env->DeleteLocalRef(jstrFont);
|
||||
methodInfo.env->DeleteLocalRef(methodInfo.classID);
|
||||
|
||||
|
|
|
@ -93,20 +93,26 @@ public class Cocos2dxBitmap {
|
|||
final int fontSize, final int alignment, final int width,
|
||||
final int height) {
|
||||
|
||||
createTextBitmapShadowStroke( string, fontName, fontSize, 255, 255, 255, 255, // text font and color
|
||||
createTextBitmapShadowStroke( string.getBytes(), fontName, fontSize, 255, 255, 255, 255, // text font and color
|
||||
alignment, width, height, // alignment and size
|
||||
false, 0.0f, 0.0f, 0.0f, 0.0f, // no shadow
|
||||
false, 255, 255, 255, 255, 0.0f); // no stroke
|
||||
|
||||
}
|
||||
|
||||
public static boolean createTextBitmapShadowStroke(String string, final String fontName, int fontSize,
|
||||
public static boolean createTextBitmapShadowStroke(byte[] bytes, final String fontName, int fontSize,
|
||||
int fontTintR, int fontTintG, int fontTintB, int fontTintA,
|
||||
int alignment, int width, int height,
|
||||
boolean shadow, float shadowDX, float shadowDY, float shadowBlur, float shadowOpacity,
|
||||
boolean stroke, int strokeR, int strokeG, int strokeB, int strokeA, float strokeSize) {
|
||||
|
||||
|
||||
String string;
|
||||
if (bytes == null || bytes.length == 0) {
|
||||
string = "";
|
||||
} else {
|
||||
string = new String(bytes);
|
||||
}
|
||||
|
||||
final int horizontalAlignment = alignment & 0x0F;
|
||||
final int verticalAlignment = (alignment >> 4) & 0x0F;
|
||||
|
||||
|
|
Loading…
Reference in New Issue