图片显示不全
initWithData用Texture2D.PixelFormat.I8有的图像不能显示
@x_iunknown 写道:
用Texture2D.initWithData()显示图像,基本的调用方法就是 texture2D.initWithData(data, format, nImageWidth, nImageHeight); 其中data是Uint8Array,长度=nImageWidth * nImageHeight,值是0或255, format=Texture2D.PixelFormat.I8。
结果是有的图像能显示,有的不能显示。不能显示的时候错误是“WebGL: INVALID_OPERATION: texImage2D: ArrayBufferView not big enough for request”。
各图像都是调用同一个函数,主要的差别好像只有图像尺寸不同。比如 1440*2048 和 2048*1650 可以正常显示。但 1350*2048,1465*2048 就会报错。已确认数据长度,参考日志如下:
请教各位是什么地方的问题?
帖子: 1
参与者: 1
如何集成适配VS Code ?
cocoscreator怎么获取所有节点
TypeScript property
分包加载,卡住了
笔记:集成Wwise音频引擎
@valiancer 写道:
记录并积累开发过程中的小问题。请多指教。
直接从微信复制过来,图片加载不哭出来,代码格式有点乱·····
更多笔记请扫码访问公众号,一起交流~关于Wwise相信很多人不太了解,那我也不多解释啦,直接到官网了解下就知道它的强大了~
由于项目需要同时播放大量音频,CC的音频组件难以支撑,同时播放数量过多会导致最后播放的音频无法播放,终止音频会发生爆音。所以最终选择了Wwise音频音频
Wwise对Unity和Unreal做了很好的支持,但对CC就···厚此薄彼了·····
只有一个N年前的Demo
https://github.com/wwisesamples/cocos2dx-IntegrationDemo
那咱们也得充分利用起来~
首先下载Demo,利用里面的WwiseWrapper文件,可以自己调整修改~
配个各个平台
windows:
1.添加附加包含目录2.添加附加库目录
3.在工程中添加文件
Android:
1.修改Application.mk2.修改Android.mk(可根据需求增加或删除插件)
LOCAL_PATH := $(call my-dir)
wwise
include $(CLEAR_VARS)
ifndef AK_CONFIGAK_CONFIG := Profile
AK_CONFIG := Release
endififneq ($(AK_CONFIG), Debug)
NDK_DEBUG := 1
endifAK_ANDROID := 1
WWISESDK := E:/workspace/Wwise/SDK
include $(CLEAR_VARS)
SDK_LIB_DIR := ${WWISESDK}/Android_$(TARGET_ARCH_ABI)/$(AK_CONFIG)/lib
SDK_LIB_DIR := ${WWISESDK}/Android_armeabi-v7a/Release/lib
ifneq ($(AK_CONFIG), Release)
LOCAL_MODULE := CommunicationCentral
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libCommunicationCentral.a
include $(PREBUILT_STATIC_LIBRARY)
include $(CLEAR_VARS)
else
LOCAL_EXPORT_CFLAGS += -DAK_OPTIMIZED
endifinclude $(CLEAR_VARS)
LOCAL_MODULE := AkMemoryMgr
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkMemoryMgr.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := AkSoundEngine
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkSoundEngine.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := AkStreamMgr
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkStreamMgr.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := AkMusicEngine
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkMusicEngine.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := AkVorbisDecoder
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkVorbisDecoder.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := AkCompressorFX
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkCompressorFX.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := AkPeakLimiterFX
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libAkPeakLimiterFX.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := zip
LOCAL_SRC_FILES := $(SDK_LIB_DIR)/libzip.a
include $(PREBUILT_STATIC_LIBRARY)include $(CLEAR_VARS)
LOCAL_MODULE := cocos2djs_sharedLOCAL_MODULE_FILENAME := libcocos2djs
ifeq ($(USE_ARM_MODE),1)
LOCAL_ARM_MODE := arm
endifwwise
LOCAL_LDLIBS := -llog -lOpenSLES -landroid -lEGL -lGLESv1_CM
LOCAL_CFLAGS := -DLUA_USE_POSIXLOCAL_C_INCLUDES := $(LOCAL_PATH)/../../../Classes
Wwise
LOCAL_C_INCLUDES += \
$(WWISESDK)/samples/SoundEngine/Android \
$(WWISESDK)/samples/SoundEngine/Android/libzip/lib \
$(WWISESDK)/samples/SoundEngine/Common \
$(WWISESDK)/include \
$(WWISESDK)/samples/IntegrationDemo/Android \LOCAL_SRC_FILES := hellojavascript/main.cpp \
../../../Classes/AppDelegate.cpp \
../../../Classes/jsb_module_register.cpp \wwise
LOCAL_SRC_FILES += \
../../../Classes/WwiseWrapper.cpp \
../../../Classes/WwiseAudio.cpp \
../../../Classes/jsb_wwise_audio.cpp \LOCAL_SRC_FILES += \
$(WWISESDK)/samples/SoundEngine/Common/AkFileLocationBase.cpp \
$(WWISESDK)/samples/SoundEngine/Common/AkFilePackage.cpp \
$(WWISESDK)/samples/SoundEngine/Common/AkFilePackageLUT.cpp \
$(WWISESDK)/samples/SoundEngine/Android/AkFileHelpers.cpp \
$(WWISESDK)/samples/SoundEngine/Android/AkDefaultIOHookBlocking.cpp \jpush
LOCAL_SRC_FILES += ../../../Classes/jpush/JPushBridge.cpp \
LOCAL_STATIC_LIBRARIES := cocos2dx_static
ifneq ($(AK_CONFIG), Release)
LOCAL_STATIC_LIBRARIES += CommunicationCentral
endif
LOCAL_STATIC_LIBRARIES += AkMusicEngine \
AkSoundEngine \
AkMemoryMgr \
AkStreamMgr \
AkCompressorFX \
AkPeakLimiterFX \
zip \include $(BUILD_SHARED_LIBRARY)
$(call import-module, cocos)
3.修改AppActivity.javastatic public AppActivity activity = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); activity = this; } //Wwise public static Object getInstance() { return activity ; }
ios:
1.在工程中添加文件2.添加链接库
$(WWISESDK)/iOS/$(CONFIGURATION)-iphoneos/lib/libAkMusicEngine.a
其中红线框起来的是通信功能,debug模式下添加,release模式下不添加
3.添加头文件的搜索路径
4.添加.a文件的搜索路径
$(WWISESDK)/iOS/$(CONFIGURATION)-iphoneos/lib
5.添加自定义值
相关配置工作完成后,可以开始使用了
1.初始化Wwise
initWwise() { cc.loader.loadRes("sounds/Init", function (err, asset) { let path = asset.nativeUrl; WwiseAudio.init(path); this.loadBnk(); }.bind(this)); }
2.导入bnk
loadBnk() { cc.loader.loadRes("sounds/PianoNote", function (err, asset) { let path = asset.nativeUrl; WwiseAudio.loadBank(path); }.bind(this)); }
3.使用(播放,停止,暂停等)
playAudio(eventName, vol) { //WwiseAudio.registerGameObj(this._indexAudioObj); //let audioID = WwiseAudio.postEvent(eventName, 100); //WwiseAudio.setVolume(this._indexAudioObj, vol); let audioID = WwiseAudio.playAudio(this._indexAudioObj, eventName, vol); this._indexAudioObj++; return audioID; }
4.在update中添加
WwiseAudio.renderAudio();
5.停止stopAudio(audioID) { WwiseAudio.stopAudio(audioID, 222); }
6.卸载
// Unregister the "Piano" game object
AK::SoundEngine::UnregisterGameObj(GAME_OBJECT_PIANO);
// Unload the sound bank
AK::SoundEngine::UnloadBank(bnkPath, NULL);WWISE::terminate();
帖子: 3
参与者: 1
Cocos游戏设计心得(三)
@2247121604 写道:
哈喽,最近忙于工作就所以没有更新博客,今天腾出时间起来签到,我们继续接着上期说。
游戏分包设计
框架的游戏文件在
'Game/game/'
目录中,打开我们会发现如下结构;Game/game/ ├─── boot/ 启动包 ├─── main/ 主包 └─── demo/ demo包
没错, 游戏文件并不在同一个目录中,现在我们把他分为了3个包;
'boot'
包负责游戏的启动,检查更新及更新操作;这是一个通用包,一般不会与具体游戏有关,或者可以通过微小修改适应各种游戏。'main'
包为游戏的主包,基本上包含了游戏的模块和逻辑。当然游戏的通用模块是可以单独分出一个包的,这里把他们包含在一起了。这个包除开通用模块部分都是和具体游戏相关的。'demo'
包是游戏的剧本包。框架的示例是rpg游戏,游戏的内容是以剧本组织的,每一个剧本也可以是一个单独的包。特别要注意的,'main'
包虽然包含了游戏的逻辑,但是是没有剧情的,也就是说'main'
包的游戏逻辑是游戏内容框架逻辑,并没有剧情把他们组织起来。这3个包各施其职组成了当前的游戏所有内容,当然游戏分包是没有数量和其他限制的,可以任意。
我们为什么要分包?
因为原cocos2dx是没有分包的,分包设计的主要目的是把游戏的内容分类。比如游戏启动更新可以是和具体游戏无关的,这可以是框架的部分;游戏的通用模块一般是精炼的程序,是和具体游戏无关的,这也是框架的部分。这样框架部分就是我们的技术储配,如果需要可以快速应用于其他游戏,可能根本不需要更改。(啰嗦,提高技术水平一种方式就是把具体的项目内容模块,总结精炼为通用的模块,这个模块就是你的水平也是你的储备)
分包文件夹的打包
现在游戏的内容已经分为多个文件夹了,哪么我们要怎么把他们添加到游戏中呢
?
cocos2dx提供了一种最简单的方式,FileUtils:addSerachPath(path)
可以把分包文件夹包含到搜索路径中,这样cocos2dx就能引用到分包中的文件。当然,如果分包只是为了提供内容分类工作,我们现在就实现了。但是,现在我们考虑一个问题,游戏如何热更
?
如果游戏分包是通过
addSerachPath
添加搜索路径实现的,那么我们唯一的方式就是替换分包文件夹中的文件。那么这样就又产生了几个问题;游戏分包的版本怎么控制、游戏具体应该怎么更新?
这样做的话,游戏版本控制最安全的方式就是在游戏分包中某个文件标记版本号,游戏更新方式差不多就是替换全部文件或者替换某几个文件。这样做的优缺点很明显;
* 优点
* 简单
* 缺点
* 分包版本标记存在于分包中的具体文件中,热更模块通用性减弱,也不利于自动化
* 分包文件整体替换,存在不必要的下载流量,并不一定所有包文件都需要替换
* 分包文件替换几个文件,也存在不必要的下载流量和不方面操作的问题,分包的更新也不利于自动化。解决上面问题的方式就是
分包文件夹打包
游戏分包文件夹打包
就是把分包文件夹中的文件打包为一个文件,这样分包的版本号就是单个文件的版本号,分包热更可以通过生成文件补丁的方式以达到最小的下载流量,而且整个分包的操作可以很好的自动化。(当然分包文件夹打包的优点不止于此),大致流程如下图分包文件夹如何打包?
分包文件夹打包很简单,就是把文件的标识和文件的内容写入二进制文件中。
文件的标识可以是一个UUID,也可以是文件的相对路径。这样就在二进制文件中组成了分包文件的映射表。
文件的标识最好是用文件的相对路径,因为这样可以和当前的游戏使用方式兼容,在游戏调试阶段可以不打包使用本地文件,毕竟打包需要时间。当前游戏框架就是使用的文件相对路径。
当然,在包文件夹打包阶段是可以进行特殊处理,比如文件加密
、压缩
、对lua文件进行编译
、对json文件进行优化
或者对图片进行压缩
等处理。分包文件加载
现在,我们已经把分包文件夹中的文件写入一个分包文件中。这个文件就包含有当前分包所有文件的映射,那么我们如何在游戏中使用呢
?
cocos2dx本身并不支持paack这种打包文件,如果是使用zip方式,那么就不需要加入此种解压方式,我们需要对cocos2dx的文件加载进行改造。
Game/frameworks/cocos2d-x/cocos/L/FileManager.h
FileManager是我们对cocos2dx FileUtils的封装,它在原有的FileUtils上层,封装了对分包文件使用的支持,当然FileManager也支持对本地文件的使用。(注意在FileManager上使用本地文件时,文件路径需要加上前缀~/
)FileManager 有如下常用函数:
*loadFilePack(packPath)
加载指定包文件 (注意文件包文件为本地文件,路径需要前缀~/
) PS:应该没有把包文件放进包文件这种需求。
*releaseFilePack(packName)
释放指定包文件,一旦释放后,则包内的文件不能访问到。
*getPackVersion(packName)
获得已经加载的包文件的版本号,packName
为已经加载的包文件名。
*lookPackVersion(packPath)
查看指定包文件的版本号 (注意文件包文件为本地文件,路径需要前缀~/
)。如此,只要调用
FileManager::loadFilePack
加载指定包文件后,我们就可以在cocos2dx中使用包文件中的文件了,使用方式不变。分包文件使用的注意事项
- 由于FileManager是在原有FileUtils的上层进行封装,所以游戏中默认会使用包文件,如果需要访问本地文件需要在路径上前缀
~/
- 由于查找包文件中的文件是根据路径映射表,所以使用文件时必须要规范路径, 当前框架中使用的路径分隔符为
/
, 不能使用连续多个路径分隔符,也不能使用.
、..
等相对路径符。合法的路径形如/res/boot/boot.lua
或者res/boot/boot.lua
。- 虽然包文件不是通过cocos2dx原有的文件工具使用,但是
addSerachPath
还是有用的。在FileManager中,addSerachPath
也可以作为包文件中的文件的搜索路径。当然如果你要设置本地文件的收索路径,你需要在FileManager上获得本地文件工具,然后在本地文件工具上调用addSerachPath
。更多作用思考
- 整个游戏初始大小可以根据添加的包调整,不需要额外设置,即使只有一个启动包
boot
也可以运行。- 如果分包内部包含解包密钥,是不是把自己的分包给别人用,而源代码并不会泄露。
留下个人博客以供学习使用:
taoqy666.com
(未完待续)
帖子: 3
参与者: 1
请问一下ios出现这个问题要怎么解决呢
@1051241152 写道:
Creator 版本:2.0.10
目标平台:IOS
详细报错信息,包含调用堆栈:
NSURLConnection finished with error - code -1001
重现方式:切换场景时向服务器发送请求数据
之前哪个版本是正常的 :
手机型号 :
手机浏览器 :
编辑器操作系统 :
编辑器之前是否有其它报错 :
出现概率:
额外线索:
帖子: 1
参与者: 1
setSiblingIndex 首次设置无效
@673229839 写道:
使用的是Cocos Creator v2.1.3,某一节点下面有两个Node,设置第一个Node的setSiblingIndex之后,在Cocos Creator Debugger插件中可以看到第一个Node的位置更新到了第二个的Node的下面,但是第一个Node里的UI并没有被渲染出来。首次之后,重复之前的操作,是可以正常显示的。有没有大佬知道是怎么回事?是不是还有强制刷新节点顺序之类的操作。
帖子: 1
参与者: 1
快手电玩中“圈圈跑酷”玩法demo
@2247121604 写道:
最近在直播软件中看到一个比较有意思的跑酷游戏,不知道大家有没有玩过,就是一个小人在转盘上跑啊跑,完整跑上一圈算胜利,轨道中有怪物阻挡,所以我没事就试着也搞了一下,因为没有资源,又不是要做的项目就想着除了一个demo,有兴趣的小伙伴们可以试一下完善一下,主要功能已经实现了,剩下的就交给你们了,嘻嘻嘻。有完善的可以发个我观摩一下欧,请收下我的膝盖。
帖子: 1
参与者: 1
Creator有没有粒子系统
你的游戏又双叒叕被破(chao)解(xi)了?
@youyun 写道:
某一天晚上,我像往常一样拖着疲惫的身子回到家,吃完饭洗完澡后熟练地打开手机开始社畜的晚间快乐时光,突然,一个公众号的推送吸引住了我的眼球,大概就是这么个样子↓
作为Roguelike游戏的忠实爱好者并且为正版元气骑士氪过金的人,这种破解内购版游戏我见得太多了,就这种规格的破解游戏根本无法让我——————————拒绝。
当然快乐总是短暂的,在爽完了破解版以后我就进入了贤者时间,内心感到了深深的空虚。
基友的几句话如弹幕般在我空旷的脑海中飘过:“啥,你还在给元气骑士氪金?你知道不知道这游戏正版用户500万,盗版用户5000万?钱多得没地方用送我点好不好?”如今我总算能体会基友说这句话时的心情,不花钱就能体验喜欢的东西,免费的午餐原来真的存在?也许成为他们其中的一员,也是一种不错的选择吧。(搭嘎口头哇路)
因为现在的我,终于有能力为这些我喜欢的游戏作出贡献!
我们是谁:一群从小玩游戏看动画长大的法律人,专注动漫游戏领域的维权业务。
我们的宗旨:让创新更有价值。
我们服务对象:“暴雪娱乐”、“剑网三”、“波西亚时光”、“南瓜先生”、“纸人”、“元气骑士”、
“MUSE
DASH”、“迷失岛”、“原谅帽大作战”、以及新上线的“弓箭传说”等。还有传统国内外知名IP“初音未来”、“名侦探柯南”、“奥特曼”、“葫芦兄弟”、“萌芽熊”等。我们能为你们做什么:免费的侵权线索监测、全程垫资的维权服务。
你们需要做什么:专心做好游戏,躺着收钱,将这些琐事交给我们即可!
常见的侵权类型:
山寨(玩法、界面抄袭):原谅帽大作战
抓包破解:元气骑士
盗用形象:初音未来
盗用背景场景(如密室逃脱):纸人
我们的成果:
A:好消息啊!好消息啊!独立游戏的各位亲朋好友,你们被抄袭、被破解的游戏有救了,他们成功做到了!阿B赔到钱了!
众人:哇塞,真的假的,阿B你赔到了多少钱,要干些什么事情啊?
B:emmm,氪两三百单没什么问题,至于做了什么,其实我们什么也没做,就等着收钱。
(以上是真实的故事)
完
公众号:
ACGN法律干货,你想看的都在这。
官网:www.youshangjiao.com.cn
合作联系:
维权相关业务咨询(只聊天不收费)↓
法律相关业务咨询(只聊天不收费)↓
帖子: 1
参与者: 1
Creator3D V1.0.1 编辑器插件脚本加载可能会在普通ts脚本之后
吐槽一下Creator 2.2初始化时的内置资源加载,启动页容易出现黑屏
@dylan465 写道:
在微信小游戏下,自从用了Creator 2.2版本每天有个别玩家反馈启动时出现黑屏的情况。启动页的场景之前有按官方教程,把图片资源打入代码包就可以解决这种问题 https://forum.cocos.org/t/topic/62296 ,后来发现新版本引擎还有加载其他的资源,也就是引擎内置的effect和material,如果这些资源在启动游戏时遇到网络差的情况下有可能会加载失败,导致出现黑屏的情况,而且不会再次执行加载一直黑屏下去。
我现在用临时的解决方法是把effect和material目录下构建出来的文件单独拷贝一份,放在wechatgame的res下,其他资源放在远程服务器,总共66k,好心疼空间
这样放在代码包里面就不会有加载失败而出现黑屏的情况了。因为找构建后关联的文件特别的麻烦,所以我想问官方可不可以考虑一下把内置的基本资源单独放在一个文件夹,这样好方便抽取资源,或者考虑一下材质系统优化一下,不一定要读取内置的材质资源才能显示sprite、label
帖子: 1
参与者: 1
有没有大神接过Google IMA SDK for HTML5 啊
笔记:横竖屏切换
@valiancer 写道:
记录并积累开发过程中的小问题。请多指教。
直接从微信复制过来,图片加载不哭出来,代码格式有点乱·····
更多笔记请扫码访问公众号,一起交流~
Step 1
适配的UI加上widget
Step 2
撸代码
//V H setOrientation(dir) { if (cc.sys.os == cc.sys.OS_ANDROID) { jsb.reflection.callStaticMethod('org/cocos2dx/javascript/AppActivity', 'setOrientation', '(Ljava/lang/String;)V', dir); } else if (cc.sys.os == cc.sys.OS_IOS) { jsb.reflection.callStaticMethod('AppController', 'setOrientation:', dir); } let frameSize = cc.view.getFrameSize(); if (dir == 'V') { cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT); if (frameSize.width > frameSize.height) { cc.view.setFrameSize(frameSize.height, frameSize.width); } cc.Canvas.instance.designResolution = cc.size(750, 1334); } else { cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE); if (frameSize.height > frameSize.width) { cc.view.setFrameSize(frameSize.height, frameSize.width); cc.Canvas.instance.designResolution = cc.size(1334, 750); } } if (CC_JSB) { window.dispatchEvent(new cc.Event.EventCustom('resize', true)); } }
Step 3
Android部分
构建时设备方向为游戏初始方向
修改AppActivity.java文件
public static void setOrientation(String dir){ if(dir.equals("V")) { ((AppActivity)(SDKWrapper.getInstance().getContext())).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); } else { ((AppActivity) (SDKWrapper.getInstance().getContext())).setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } }
Step 4
ios部分
构建时设备方向为游戏初始方向
ios工程设备方向也为游戏初始方向,不需要添加其他的
修改AppController.mm文件
UIInterfaceOrientationMask orientation = UIInterfaceOrientationMaskLandscape;
(UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {
return orientation;
}(void)setOrientation:(NSString*)dir {
if ([dir isEqualToString:@"V"]) {
orientation = UIInterfaceOrientationMaskPortrait;
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationPortrait] forKey:@"orientation"];
} else {
orientation = UIInterfaceOrientationMaskLandscape;
[[UIDevice currentDevice] setValue:[NSNumber numberWithInteger:UIInterfaceOrientationLandscapeRight] forKey:@"orientation"];
}
}
帖子: 1
参与者: 1
creator2.2 samsung手机sprite精灵图片锯齿,急!急!急!
creator2.0.9打包安卓后,webview组件无法读取本地svg图
@563800905 写道:
使用creator发安卓包之后,webview组件使用cc.url.raw读取resources文件夹下的svg图失败。
webView.url=cc.url.raw("xxxx.svg")
打web_mobile包在网页上可以读到,跪求大佬帮助
帖子: 1
参与者: 1
招聘cocos creator前端
@leejinchen 写道:
职位详情
1.使用cocos creator开发游戏,系统功能实现;
2.负责H5休闲游戏的各个平台发布,后续版本的迭代开发及调优;
3.优化前端体验和页面响应速度,解决跨浏览器和移动设备兼容性问题,提升用户体验;任职要求:
1.熟悉js、ts语言,1年以上cocos lua/js/ts开发经验,有cocos creator开发经验
2.可以熟练使用cocos creator开发游戏
3.能够独立思考,分析问题,并解决问题
4.有一定的学习能力,完整的项目经验
5.熟悉安卓打包、h5 sdk接入或其他小游戏发布流程者优先;
6.对技术始终充满热情,能承受一定程度的工作压力;
7.有上线H5游戏开发经验这优先。
8.能单挑整个项目,只是辅助角色的不要投简历。
帖子: 2
参与者: 1