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.
هنوز سوال دارم راجع به این آبجکت ولی فعلا همین هارو اگر کسی می دونه، ممنون میشم جواب بدید.
موفق باشید؛
من دارم یه بازی تحت وب، سمت کلاینت می نویسم. برنامه ام در شرایط عادی کار می کرد. ولی می خواستم برنامه بیشتر منعطف باشه، برای همین از یک آبجکت استفاده کردم.
آبجکت به شرح زیر است:
/* 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.
هنوز سوال دارم راجع به این آبجکت ولی فعلا همین هارو اگر کسی می دونه، ممنون میشم جواب بدید.
موفق باشید؛