PDA

View Full Version : سوال: چند سوال در مورد یک آبجکت بازی



mrgr4vity
چهارشنبه 30 بهمن 1392, 20:01 عصر
سلام؛

من دارم یه بازی تحت وب، سمت کلاینت می نویسم. برنامه ام در شرایط عادی کار می کرد. ولی می خواستم برنامه بیشتر منعطف باشه، برای همین از یک آبجکت استفاده کردم.

آبجکت به شرح زیر است:


/* Insect Object */
var insect_object = function(insect_click){
return{
x_insect_sprite: 0,
y_blood_sprite: 0,
insect_kind: 1,
insect_num: 1,
x_pos_start: null,
y_pos_start: null,
x_pos_des: null,
y_pos_des: null,
insect_sprite: function(){ // Do this in 50ms
$('.insect').css('background-position',this.x_insect_sprite+'px 0');
this.x_insect_sprite -= 64;
if(this.x_insect_sprite < -255){
this.x_insect_sprite = 0;
}
},
blood_sprite: function(){ // Do this in 70ms
$('.blood').css('background-position','0 '+this.y_blood_sprite+'px');
this.y_blood_sprite -= 35;
},
insect_start_pos: function(){
var xy_random = parseInt((Math.random()*1)+0.5);
// if xy_random == 0 ====> x is 0 or 700 , y is in [0,700]
// if xy_random == 1 ====> y is 0 or 700 , x is in [0,700]
if(xy_random == 0){
this.x_pos_start = parseInt((Math.random()*1)+0.5)*700;
this.y_pos_start = parseInt((Math.random()*1)*700);
}else{
this.x_pos_start = parseInt((Math.random()*1)*700);
this.y_pos_start = parseInt((Math.random()*1)+0.5)*700;
}
},
insect_des_pos: function(){ // Do this in 1000ms
this.x_pos_des = parseInt((Math.random()*1)*700);
this.y_pos_des = parseInt((Math.random()*1)*700);
$('#insect'+this.insect_kind+'-'+this.insect_num+'').animate({top: this.y_pos_des+'px' , left: this.x_pos_des+'px'},5000); // Do this in 5000ms
},
insect_create: function(){
$('div.rightboard').append('<div id="insect'+this.insect_kind+'-'+this.insect_num+'" class="insect kind'+this.insect_kind+'"></div>');
$('div.insect').last().css({'top':this.y_pos_start , 'left':this.x_pos_start});
},
insect_kill: function(){
var position = $(insect_click).offset();
position.top += 4;
position.left += 4;
$('body').append('<div style="position:absolute;z-index:9999;margin-top:'+position.top+'px;margin-left:'+position.left+'px" class="blood"></div>');
$(insect_click).remove();
}
};
};
/* Insect Object */


حال با استفاده از دستورات زیر به فراخوانی آبجکت می پردازم:

var insect = insect_object($('div.insect'));
insect.insect_start_pos();
insect.insect_create();
setInterval(insect.insect_sprite(),50);
setInterval(insect.insect_des_pos(),1000);

ولی 3 خط اول به خوبی جواب میده ولی 2 خط آخر کار نمی کنه. خطای منطقی داره، چون تو کنسول هیچ ارور خاصی نمی نویسه وقتی هم console.log می کنم (مثلا ()insect.insect_sprite رو ) میزنه Undefined.


هنوز سوال دارم راجع به این آبجکت ولی فعلا همین هارو اگر کسی می دونه، ممنون میشم جواب بدید.

موفق باشید؛

Javidhb
جمعه 02 اسفند 1392, 00:40 صبح
احتمالا اینجوری درست میشن:

var insect = insect_object($('div.insect'));
insect.insect_start_pos();
insect.insect_create();
setInterval(function(){
insect.insect_sprite()
},50);
setInterval(function(){
insect.insect_des_pos()
},1000);

geeking
جمعه 02 اسفند 1392, 18:45 عصر
سلام

احتمالا اینجوری درست میشن:

نه مشکل از این نیست، این که شما کردید تفاوتی توی جواب نمیکنه .

خود تعریف object ایراد داره .

insect_object باید ارجاع به یک تابع ناشناس رو انجام بده .
یعنی یک یک تابع خود فراخوان توی اون ریخته بشه،
تابعی که خودش را فراخوانی میکنه بصورت زیر تعریف میشود :



(function () {

})();