这在过去的几周里一直困扰着我.在这段时间里,我一直在网上进行研究,甚至在Borders的计算机部分读书,试图找到答案,但我没有太多运气.
我为侧卷轴视频游戏编写了2D级编辑器.现在我想把它变成一个游戏,我有一个可以跑步和跳跃探索关卡的玩家,类似于"马里奥".
真正给我带来麻烦的是碰撞响应(不是检测:我已经知道如何判断两个块是否发生碰撞).以下是我将要说明的一些场景,以便您可以看到我的问题(阴影块是地面,箭头是玩家的速度矢量,虚线是玩家的投影路径).
查看此碰撞响应方案图像:
http://dl.dropbox.com/u/12556943/collision_detection.jpg
假设情景(1)和(2)中的速度矢量相等(相同的方向和幅度).然而,在场景(1)中,玩家正在击中该区块的一侧,并且在场景(2)中,该玩家落在该区块的顶部.这使我得出结论,确定碰撞响应不仅取决于玩家的速度矢量,还取决于玩家相对于碰撞块的相对位置.这引出了我的第一个问题:知道速度矢量和玩家的相对位置,我如何确定玩家与该块碰撞的方向(左侧,右侧,顶部或底部)?
我遇到的另一个问题是如果玩家与同一帧中的多个块发生碰撞,如何确定碰撞响应.例如,假设在场景(3)中,玩家同时与这两个块碰撞.我假设我将不得不遍历玩家正在碰撞的每个区块并相应地调整每个区块的反应.总结一下,这是我的第二个问题:如果玩家与多个块碰撞,我该如何处理碰撞响应?
请注意,我从未透露过我正在编程的语言; 这是因为我更喜欢你不知道(不过是个人的,但是:).我对伪代码比对特定语言代码更感兴趣.
谢谢!
我对Android,编译和链接都很新.我不知道哪些细节对我的问题很重要,所以我会告诉你一切.如果您发现任何奇怪或不正确的内容,请告诉我们.
我在Android-NDK中构建了libcrypto.so和libssl.so库.我编写了使用openssl.so中的函数的本机代码(而openssl.so使用了libssl.so中的函数).代码编译,但是在链接时我收到"未定义的引用"错误:
./obj/local/armeabi/objs/pki_send/pki_send.o: In function `main':
/home/android/nativeserver/jni/pki_send.c:27: undefined reference to `RSA_generate_key'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/pki_send] Error 1
Run Code Online (Sandbox Code Playgroud)
我在Google上搜索并找到了一个与我有同样问题的人,她甚至调用相同的功能(除了这个人不是为Android构建):http://ubuntuforums.org/showthread.php?t = 1081028.我会在这里引用她的帖子中与我的问题相关的部分:
当我删除一个参数[对导致"未定义引用"的函数]时,编译器说参数太少,当我添加一个参数时,编译器说有太多的参数,所以看起来有"某种"类型的参考正确的功能.也许有一些错误的链接?
我注意到了同样的行为.她通过使用-lssl设置进行编译来解决她的问题,该设置告诉编译器使用openssl库.对我来说,我改变了Android.mk文件中的模块:
LOCAL_LDLIBS += -ldl
Run Code Online (Sandbox Code Playgroud)
对此:
LOCAL_LDLIBS += -lssl -lcrypto -ldl
Run Code Online (Sandbox Code Playgroud)
我包括-lcrypto只是为了安全,因为libssl依赖于libcrypto.现在,当我运行ndk-build时,收到以下错误:
/home/android/android-ndk-r8/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/../lib/gcc/arm-linux-androideabi/4.4.3/../../../../arm-linux-androideabi/bin/ld: cannot find -lssl
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/pki_send] Error 1
Run Code Online (Sandbox Code Playgroud)
此错误显示"ld"找不到libssl.so.我的jni目录中有libcrypto.so和libssl.so.理想情况下,我想找到一种方法将jni目录添加到"ld"的搜索路径中,但我无法弄清楚这一点.我试图通过将libssl.so和libcrypto.so添加到以下目录来解决这个问题:/ android-ndk-r8/platforms/android-8/arch-arm/usr/lib(我相信"ld"在这里搜索库).一旦我这样做,我再次运行ndk-build并收到"未定义的引用"错误:
./obj/local/armeabi/objs/pki_send/pki_send.o: In function `main':
/home/android/nativeserver/jni/pki_send.c:27: undefined reference to `RSA_generate_key'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/pki_send] Error 1
Run Code Online (Sandbox Code Playgroud)
从这里开始,我对如何进行一无所知.
万一它很重要,这是我的Android.mk文件中的代码: …