我想创建游戏但是我要从那些基础开始学啊?

咨询电话:400-699-8683
没有什么基础,但是想学IT不知道难不难学
没有什么基础,但是想学IT不知道难不难学
& & & & 关于技术难不难这个问题呢,相信无论多少回答最后都是两个答案:难?不难?最近一月我们博学实训收到很多年轻学员的咨询,尤其是一些想转行投入IT行业的年轻人,来电的时候都会问:&老师我没什么基础,我怕交了学费学不好,学不会哦&
& & & & 如果说很难,为什么IT行业那么多大神级人物呢?如果说学IT不难,为什么那么多人学不会?首先我们先从学者的角度分析一下要不要学IT,想不想转IT行业是自己的主观想改变现状还是从众趋势,这有两个区别,主观改变现状是学者基于多方面考虑思考后决定的,主观意识很强烈,从众趋势学IT的学员有可能看到身边的朋友圈或者IT趋势影响从众学习,这两者在学IT的时候学习欲望上有很大的区别,在学IT技术的过程中遇到挫折时克服困难的心态就不一样。
& & & & &从IT行业专业分析难易,IT是信息技术的总称,也是整个计算机行业从业者的职业称呼,IT行业包括了硬件,软件,通信,网络和设备类,在每一个分类里面都有难易的分工,选择合 适自身基础的学科分类都比较容易学好学会。在准备投入学IT之前要对自己进行客观的分析,要明白自己学的是什么,将来的职业方向,市场的技能需求都要好好思考,由浅再入深去学习,那么学IT技术也就不那么难了。
学校背景:CEAC国家信息化计算机教育认证管理办公室授权广东省IT人才实训基地
学校电话:05
全国热线:400 699 8683
深圳市博学远航教育科技有限公司版权所有我想用cocos2dx学习开发安卓游戏,请问要学习什么基础语言
我想用cocos2dx学习开发安卓游戏,请问要学习什么基础语言
不知道朋友什么基础,安卓开发,JAVA是必备知识,一定要学的。C++务必要懂,因为
cocos2dx是C++实现的
你还没有登录,请先登录或注册慕课网帐号
3801人关注
39295人关注
Copyright (C)
All Rights Reserved | 京ICP备 号-2工作所属分类:帖子:2148手有面包,才能心怀梦想。 阅读量:... 评论:......... UP主
&先讲下我为什么读这个专业吧(觉得多余的自动往下跳吧)先从up初中时候说起吧,我在初二的时候成绩不好,被班主任推荐去念中专,当时小不懂事。感觉能脱离这个束缚我已久的地方去哪都无所谓,来到了中专以后的感觉还真是&天堂&,天天上课睡觉,中午去网吧打游戏,下午接着睡觉或者看小说。
&然后一转眼2年过去了,要实习了。(中专读2年最后1年是实习),去宁波的一家电子工厂打工。做了半年就感觉太枯燥了,然后回来了。回来之后被学校告知没有完成1年实习时间又被要求去本地一家工厂继续实习。。。做了2个月又回来了。因为工厂实行早晚轮班制。因为我是属于一熬夜就上火的人,做了没多久一脸的包包 洗个脸都有点痛苦。。。学校最后发飙威胁我不做你没毕业证,经过工厂的人事部和家长的轮流交谈才同意去自己去找工作。(以前都是不准自己去找工作实习的,也不知道一个学生多少钱。)
&然后找到一个舞台灯光公司工作(差点没命)。公司主要是承接大型舞台的灯光、音响、大屏幕、反正就是舞台上所有舞美,什么都干。我是选择跟灯光的师傅所以自然就是灯光了。由于舞台灯光的电脑灯是挂在很高的地方,它们的信号线跟电源线都是由人去串联起来,如果是室外的话就有点危险。。(没有任何保护措施的)有一次就是在给师傅递东西的时候手上出汗打滑,人直接往下掉半米赶紧用腿和手盘住。。。目测离地面8米 & 地上全是搭建舞台的架子 & &摔下去妥妥的。。。。 所以小朋友们一定要好好读书啊。。。
&工作了1年 觉得这事情跟搬运工差不多,还有点危险。(ps:月1600,最忙最忙的情况下3000江西南昌。。)不想长期干下去,一定要学们技术。这时候自己已经18岁了。我觉得我对动漫挺有兴趣,跟家里人商量我可以出1W 希望支持我,最后我如愿以偿的上了一所大专,泰豪动漫学院。。
&现在大二了,也没发现这学校到底教了我什么以后可以让我吃饭的东西。。
(就去年暑假2个月花了3000学素描色彩跟速写)这是up现在临摹的石膏像。换个思路我就当买个文凭算了,利用其他没上课的时间争取自学,以后去学游戏原画,动画专业也不知道工作好找不好找,问的人都是摇头。感觉游戏原画还不错,但是学费挺贵的。我父母就开个煤气店的,我也不太清楚他们一个月多少。。。我也不敢去问这个。所以我想问问AC上的老司机们,我现在这水平去培训4个月出来后可以找到游戏原画公司岗位吗。。。。。我怕浪费家里钱。。。家里又不是很富裕。。。。有钱人就留学去了。。。
& 现在up每个星期六都有一个画室(就是暑假去的那个画室。。。是因为我正好是动画专业,招人招不到于是我去试探性的问了下。结果成了。。)的兼职工作,教小学僧们还一个初二的画动漫人物。。。(求不喷。。因为没有这份工作之前,我的父亲大人是有点不太想支持我继续走这条路,虽然有点严重但是态度的确是比以前好了点。。我暑假说想学素描父上直接破口大骂。。。为什么又要花钱?!等等。。唉。。其实我也搞不清暑假的时候为何那么激动,现在又好多了。画室兼职的工作让他态度转变仅仅是我个人的猜测) &
& &考虑了很久, 就在前些天跟他商量了原画的事情。他是支持我的。我虽然挺开心,但是也有点担心。。因为他准备今年买个便宜的几W的比亚迪,说是亲戚朋友现在都有小车了,他也羡慕了好久。感觉我要是不找到个好工作赚钱给他买个车子,我这辈子都会愧疚死。
&最后总结下吧。。我想学游戏原画,去哪好点?出来后真的能找到工作吗。。另外感谢大家愿意花时间看这个破文章。。第一次投稿,写的不好,望大家理解。就当看个笑话吧。谢谢! 收藏投1蕉你的态度分享
官方下载new友情链接反馈京ICP备号节目制作经营许可证(京)字第05158号0
还没有acfun账号,
请选择分组。您添加关注的用户将出现在对应的组中。添加关注把视频贴到博客或论坛视频地址复制flash地址复制html代码复制通用代码复制只需一步,快速开始
后使用快捷导航没有帐号?
查看: 2116|回复: 7
我想问问如果做游戏开发要学什么?
TA的每日心情怒 17:48签到天数: 38 天[LV.5]常住居民I
C++还是java,HTML5等等等等等?
最好有人教啦,不过没什么希望!
TA的每日心情擦汗 21:50签到天数: 394 天[LV.9]以坛为家II
开发游戏在这里问。。。
TA的每日心情慵懒 18:42签到天数: 260 天[LV.8]以坛为家I
网页大多数用坑爹的Java
TA的每日心情开心 15:48签到天数: 116 天[LV.6]常住居民II
不懂,来看看的,顺便学习
TA的每日心情擦汗 14:33签到天数: 288 天[LV.8]以坛为家I
菜鸟路过~等着玩你的游戏~
TA的每日心情开心 19:39签到天数: 350 天[LV.8]以坛为家I
楼主开发什么平台的游戏?
Windows 游戏开发的话。
开发游戏引擎首先要学c/c++,其次是算法,还要学习微软的directx开发技术,跨平台就考虑用opengl.
网络游戏或者服务器编程就需要深入了解tcp/ip应用。
TA的每日心情怒 17:48签到天数: 38 天[LV.5]常住居民I
多平台的,看了一下JAVA的发现做出效果不怎么样
是通过JNI封装的 OpenGL 等。理论上应该不会比C写的慢多少。不过呢?我觉得没C好。
TA的每日心情怒 17:48签到天数: 38 天[LV.5]常住居民I
这里有人玩魔兽吗?有的话看下吧!
由于别的论坛好像没什么牛人,所以我来这里学编程的
为《魔兽III》添加自己的本地函数
(转的·············管理员别删我帖喔!)
testmap.rar中的loader无需复制到魔兽文件夹即可使用,但是需要确保您的注册表中HKEY_CURRENT_USER\Software\Blizzard Entertainment\Warcraft III\InstallPathX键值指向您魔兽的安装文件夹。
loader.rar中的文件必须复制到魔兽文件夹方可使用,不检查您的注册表。
如果你测试一直失败,也许你需要更换你的免CD补丁。
我将告诉你如何使用xttoc's jAPI来些你自己的War3本地函数。你必须先了解C/C++并且有一个你了解其调用协定的编译器。我将使用Borland's bcc 5.60。很不幸的,我无法得到任何免费的工具。
&&理论上使用这个技术我们可以做任何事,虽然可能需要大量的研究。但有一个严重的限制,那张地图无法在BNet上发布。我要明确的警告某些为地图写运行库的人,因为那将导致安全问题。不管怎么样,我们先开始。在C程序中数据结构特别细致。我们将继承两个:一个堆-只要动态分配数组即可。然后我们做一些更有想象里的事,一个迷宫的不相交集。
&&首先先从这个链接下载jAPI Tool。。
&&把这些材料Copy到你的War3目录,除了jNatives文件夹外-你需要留下文件夹,但要清空其中的内容。你很可能需要为loader建立快捷方式,只需为LoaderWar3.exe添加标记一个window命令行来测试,如&D:\games\Warcraft III\LoaderWar3.exe& -window
&&我们需要做的流程概要:
-写本地函数
-将本地函数导入War3
-将本地函数的声明添加到common.j
-用本地函数写代码
-运行游戏
我们以经典的Hello World开始。以下是test.cpp
The following routines are all exported by japi.dll:
char* MemStrSearch(unsigned char *start, unsigned char *end, char *str);
bool MemPatternCompare(unsigned char *address, unsigned char *pattern, unsigned char *mask, unsigned long length);
unsigned char* MemPatternSearch(unsigned char *start, unsigned char *end, unsigned char *pattern, unsigned char *mask, unsigned long length);
PIMAGE_SECTION_HEADER GetImageSectionHeaders(HMODULE hModule, WORD *count);
PIMAGE_SECTION_HEADER GetImageSectionHeader(HMODULE hModule, unsigned char name[8]);
void& && &&&jAPI jBindNative(void *routine, char *name, char *prototype);
void& && &&&jAddNative(void *routine, char *name, char *prototype);
jString jAPI jStrMap(char *str);
char*& && &&&jAPI jStrGet(jString strid);
// - Andy Scott aka xttocs
#include &windows.h&
#include &stdio.h&
#define jNATIVE& && &&&__stdcall
#define jAPI& && &&&__msfastcall
#define FloatAsInt(f) (*(long*)&f)
#define IntAsFloat(i) (*(float*)&i)
typedef long jS
typedef long jI
typedef long jR
typedef void& && &&&(jAPI *jpAddNative)(void *routine, char *name, char *prototype);
typedef jString (jAPI *jpStrMap)& && &&&(char *str);
typedef char *& && &&&(jAPI *jpStrGet)& && &&&(jString strid);
jpAddNative& && && && && & jAddN
jpStrMap& && && && && & jStrM
jpStrGet& && && && && & jStrG
#pragma warning ( disable : 4996 )
jString jNATIVE test(jString js, char *fnname)
& && &&&char *s;
& && &&&s = jStrGet(js);
& && &&&s[0] = 'A';
& && &&&return jStrMap(s);
BOOL APIENTRY DllMain(HMODULE hModule, DWORD&&ul_reason_for_call, LPVOID lpReserved)
& && &&&if (ul_reason_for_call == DLL_PROCESS_ATTACH)
& && && && && & DisableThreadLibraryCalls(hModule);
& && && && && & HMODULE hjApi = GetModuleHandle(&japi.dll&);
& && && && && & jAddNative& && &&&= (jpAddNative)GetProcAddress(hjApi, &jAddNative&);
& && && && && & jStrMap& && && && && & = (jpStrMap)*GetProcAddress(hjApi, &jStrMap&);
& && && && && & jStrGet& && && && && & = (jpStrGet)*GetProcAddress(hjApi, &jStrGet&);
& && && && && & jAddNative(test, &test&, &(S)S&);
& & return TRUE;
在这里有两点很重要
jString jNATIVE test(jString js, char *fnname)
& && &&&char *s;
& && &&&s = jStrGet(js);
& && &&&s[0] = 'A';
& && &&&return jStrMap(s);
jAddNative(test, &test&, &(S)S&);
-WD表示build一个DLL,-e后是输出的文件,test.cpp是输入的源文件。文件扩展名是.xjp而不是.dll,因为这样才能被jAPI识别并链接如War3。现在将test.xjp复制到jAPI将要检查,也就是War3目录下的jNatives文件夹中(如果不复制则留空)。
&&接下来我们将本地函数添加到common.j。如果你没有它的一份副本,可以用mpq工具从war3patch.mpq中解出来。
native test takes string s returns string
现在从jAPI包中启动LoaderWorldEditor.exe。如果什么也没有发生,可能是war3的注册信息问题,重装下War3试试。如果崩溃了,很可能是你设定的函数的调用约定出了问题,你可以将错误信息发送给我看看。好,现在运行WE,创建一张新地图,做任何您想做的事,将你修改过的common.j导入,并把它的路径从war3mapImported\改为Scripts\来确保它把默认的common.j覆盖。如果几次保存过后你仍然得到本地函数声明问题,检查一下你在common.j中设置的类型和在jAddNative中设置的类型是否匹配。
&&如果一切OK,写一些JASS来测试test函数。试一下游戏开始几秒后执行BJDebugMsg(test(&Hello&))。保存地图。如果仍出现本地函数的声明问题,检查common.j的原型。如果保存无误,不要动“测试地图”按钮。运行jAPI LoaderWar3.exe代替,或者用命令行-window来运行会更合适。选择你的地图并开始、如果选中地图后没有显示玩家信息,很有可能你在.xjp文件中丢失了一些本地函数。所有你添加到common.j中的本地函数在你的自定义DLL中都要有入口。
&&如果游戏运行后显示&Aello&,恭喜,你完成了你的第一个自定义本地函数。现在让我们做一些更有趣的事。动态分配内存的缺乏是JASS编程者的一个共同的遗憾。我们甚至不能传递数组参数!在C中,我们可以轻松的用malloc()来分配一大块内存。这有些危险,因为这些分配的内存并不会随着地图结束而释放。尽管我们需要手动释放,但它依然不失为一个好的实践。简单起见,并且我们有return bug来协调,我们仅仅需要用integer来实现数组。设想我们需要4个函数:
native ArrayAlloc takes integer length returns integer
native ArrayFree takes integer arr returns nothing
native ArrayGet takes integer arr, integer index returns integer
native ArraySet takes integer arr, integer index, integer val returns nothing
将它们添加到common.j。
接下来复制test.cpp到array.cpp并且用上面的数组本地函数代替原来的test本地函数
jInt jNATIVE ArrayAlloc(jInt len, char *fnname)
& && &&&return (jInt)malloc(sizeof(jInt)*len);
jInt jNATIVE ArraySet(jInt array,jInt index,jInt val, char *fnname)
& && &&&int *p = (int *)
& && &&&p[index] =
& && &&&return p[index];
jInt jNATIVE ArrayGet(jInt array, jInt index, char *fnname) {
& && &&&int *p = (int *)
& && &&&return p[index];
jInt jNATIVE ArrayFree(jInt array, char *fnname) {
& && &&&int *p = (int *)
& && &&&free(p);
& && &&&return 0;
在所有的函数中我都返回了一些值,因为JASS似乎希望所有的函数都有返回值,即使函数什么也没有返回。
要给以上的数组本地函数添加注册信息,要写以下几行:
& && && && && & jAddNative(ArrayAlloc,&ArrayAlloc&,&(I)I&);
& && && && && & jAddNative(ArraySet,&ArraySet&,&(III)I&);
& && && && && & jAddNative(ArrayGet,&ArrayGet&,&(II)I&);
& && && && && & jAddNative(ArrayFree,&ArrayFree&,&(I)I&);
用 bcc32 -WD -e &array.xjp& array.cpp 来编译,并用array.xjp代替jNatives文件夹下的test.xjp
测试一些简单的代码,如:
local integer heap = ArrayAlloc(16)
call ArraySet(heap,5,42)
call BJDebugMsg(I2S(ArrayGet(heap,5)))
call ArrayFree(heap)
如果有问题,可以参考上面test实例中的错误信息
练习:为数组添加边界检测和动态调整大小
以下是另一些本地函数,和他的迷宫生成地图,一个不相交集
typedef struct {
jInt jNATIVE DJSNew(jInt len, char *fnname)
& && &&&node *set = (node *)malloc(sizeof(node)*len);
& && &&&for(i=0;i&i++) {
& && && && && & set.parent = -1;
& && && && && & set.rank = 0;
& && &&&return (int)
jInt jNATIVE DJSFind(jInt iset, jInt x, char *fnname) {
& && &&&node *set = (node *)
& && &&&if (set[x].parent == -1)
& && &&&set[x].parent = DJSFind(iset,set[x].parent);
& && &&&return set[x].
jInt jNATIVE DJSUnion(jInt iset,jInt x,jInt y, char *fnname)
& && &&&node *set = (node *)
& && &&&int xr = DJSFind(iset,x);
& && &&&int yr = DJSFind(iset,y);
& && &&&if(set[xr].rank & set[yr].rank)
& && && && && & set[yr].parent =
& && &&&else if(set[xr].rank & set[yr].rank)
& && && && && & set[xr].parent =
& && &&&else {
& && && && && & set[yr].parent =
& && && && && & set[xr].rank++;
& && &&&return 0;
jInt jNATIVE DJSFree(jInt iset, char *fnname) {
& && &&&free((node *)iset);
& && &&&return 0;
一个比较常用的结构pair和配套函数
typedef struct {
pair *allocpair() {
& && &&&return (pair *)malloc(sizeof(pair));
void freepair(pair *p) {
& && &&&free(p);
jInt jNATIVE cons(jInt x, jInt y, char *fnname) {
& && &&&pair *newpair = allocpair();
& && &&&newpair-&car =
& && &&&newpair-&cdr =
& && &&&return (jInt)
jInt jNATIVE car(jInt ipair, char *fnname) {
& && &&&pair *p = (pair *)
& && &&&return p-&
jInt jNATIVE cdr(jInt ipair, char *fnname) {
& && &&&pair *p = (pair *)
& && &&&return p-&
原型字母表:
Integer& && && && && & I
Real& && && && && & R
String& && && && && & S
Code& && && && && & C
Boolean& && && && && & B
Returns nothing& && &&&V
Handles& && && && && & H; (?)
Handle ext.& && &&&H followed by ext followed by semicolon e.g. H
每个本地函数的最后需要一个额外的&char * fnname&参数。War3会把调用的本地函数名传递进来,我们需要它来确保栈被释放。感谢xttocs。
如果你的stock loader有问题,试一下loader.rar中的那个。
增强游戏的功能,,,由于游戏本身没有提供相关的内挂接口,于是可以反工程得到其的进程hook apis,,做成以这个apis为增加的内挂系统,,这在很多游戏中已经也有了,比如ffxi的windower之类,raknet的hook apis,,,其实它们都是引擎功能的修改扩展接口。
全体成员请点此查看详细内容
手机扫我进入移动触屏客户端
关注我们可获取更多热点资讯
Honor accompaniments. theme macfee(Octavarium)
(深海小豚鼠)
第三方登录:

我要回帖

 

随机推荐