راه رفتن کاراکتر با کلیک ماوس

peighami

New Member
سلام دوستان
من در حال انجام یک پروژه گیم با flash as3 هستم و به یه مشکل برخوردم
میخوام کاراکتر من هر جا که موس کلیک شد راه بره به اون نقطه برسه و easein , easeout هم نداشته باشه
میخوام اگر مثلا کاراکتر من راه رفتنش 10 فریم هست محاسبه کنه تا نقطه کلیک مثلا 2 بار یا 3 بار مووی کلیپمو اجرا کنه و کاراکتر با یک سرعت معین به اون نقظه بره
در واقع نمیخوام کاراکتر یه دفعه وسط فریم بایسته
من سرچ کردم چیزی که اینطوری باشه پیدا نکردم
اگه کمک کنید یا منبعی رو معرفی کنید ممنون میشم
لطفا از معرفی سایت های روتین در این زمینه خودداری کنید چون همشونو زیرو رو کردم و تسلط زیادی به as3 ندارم نمیتونم زیاد edit رو سورس انجام بدم
 

*mohamad*

Member
سلام دوستان
من در حال انجام یک پروژه گیم با flash as3 هستم و به یه مشکل برخوردم
میخوام کاراکتر من هر جا که موس کلیک شد راه بره به اون نقطه برسه و easein , easeout هم نداشته باشه
میخوام اگر مثلا کاراکتر من راه رفتنش 10 فریم هست محاسبه کنه تا نقطه کلیک مثلا 2 بار یا 3 بار مووی کلیپمو اجرا کنه و کاراکتر با یک سرعت معین به اون نقظه بره
در واقع نمیخوام کاراکتر یه دفعه وسط فریم بایسته
من سرچ کردم چیزی که اینطوری باشه پیدا نکردم
اگه کمک کنید یا منبعی رو معرفی کنید ممنون میشم
لطفا از معرفی سایت های روتین در این زمینه خودداری کنید چون همشونو زیرو رو کردم و تسلط زیادی به as3 ندارم نمیتونم زیاد edit رو سورس انجام بدم
______________

دوستان از پاسخ دادن الکی ممانعت کنید
میدونم که برنانه فلش با ویژوال بیسیک و تری دی مکس تفاوت دارن و همچنین ویژوال بیسیک با تری دی مکس متفاوت است

دوستان میشه همچین کارکتر راه رفتن موس با ویژوال بیسیک برنامه نویسی @و با انیمیشن سازی تری دی مکس انجام داد نیاز به فایل کم حجم آموزشی pdf
 
آخرین ویرایش:

peighami

New Member
محمد جان من متوجه منظورت نشدم، من مشکل انیمیشن ندارم، مشکل بنده اکشن اسکریپت 3 هست و تو فلش میخوام این کارو بکنم نه جای دیگه
 

*mohamad*

Member
محمد جان من متوجه منظورت نشدم، من مشکل انیمیشن ندارم، مشکل بنده اکشن اسکریپت 3 هست و تو فلش میخوام این کارو بکنم نه جای دیگه
بله متوجه شدم فلش متفاوت هست به برنامه دیگه مثل ویژوال Vb و تری دی مکس 3dmax اما میخواستم ببینم درحین جواب دادن به سوال شما اساتید ما شما هم راهنمای میکنن با درج pdf آموزشی
 

mmz2006

Active Member
با سلام

ابتدا در فریم اول کاراکتر دستور استپ رو بنویسید
بعد در فریم آخرش هم دستور گوتواندپلی به فریم 2.

این هم از کد:
[JSS]
//به نام خدا

var xclick:Number = 0 ;
var yclick:Number = 0 ;
var xspeed:Number = 0 ;
var yspeed:Number = 0 ;

stage.addEventListener(MouseEvent.CLICK, funClick);

function funClick(event:MouseEvent):void
{
// در این قسمت می توانید کاراکتر را گوتوپلی کنید به فریم دو
//و در فریم آخر خود کاراکتر هم گوتوپلی به فریم 2 باشد تا حرکتش تکرار شود
xclick = mouseX ;
yclick = mouseY ;
xspeed = ((xclick - MyMovieClip.x ) /100) ; // برای تشخیص نسبت سرعت ایکس و ایگرگ اول فاصله مبدا و مقصد محاسبه شده
yspeed = ((yclick - MyMovieClip.y ) /100) ; //بعد برای کاهش سرعت تقسیم شد .دقت کنید که ایکس و ایگرگ باید بر یک عدد واحد تقسیم شوند
stage.addEventListener(Event.ENTER_FRAME, funFrame);
}

function funFrame(event:Event):void
{
MyMovieClip.x += xspeed ;
MyMovieClip.y += yspeed ;

if(Math.abs(xclick - MyMovieClip.x ) < 3 ){
//در این قسمت می توانید حرکت کاراکتر را متوقف کنید و به آن دستور استپ دهید
stage.removeEventListener(Event.ENTER_FRAME, funFrame);
}
}[/JSS]


نمونه رو هم ضمیمه کردم.

موفق باشید.
 

پیوست ها

  • move movie mouse.rar
    6.8 کیلوبایت · بازدیدها: 20

peighami

New Member
mmz2006 عزیز ممنون از وقتی که گذاشتید
ولی اون مشکل همچنان پا برجاست یعنی وقتی با فاصله زیاد از کارکتر کلیک میکنی تند میره و یه جورایی سر میخوره و وقتی نزدیک کاراکتر کلیک میکنی کاراکتر درجا میزنه
چه باید کرد استاد ؟
 

mmz2006

Active Member
با سلام مجدد

کد مورد نظر شما این هست:
[JSS]
//به نام خدا
var speed:Number = 10 ;
var xclick:Number = 0 ;
var yclick:Number = 0 ;

stage.addEventListener(MouseEvent.CLICK, funClick);

function funClick(event:MouseEvent):void
{
//اینجا کاراکتر پلی می شود
xclick = mouseX ;
yclick = mouseY ;
stage.addEventListener(Event.ENTER_FRAME, funFrame);
}

function funFrame(event:Event):void
{
var xDistance:Number = (xclick - MyMovieClip.x );
var yDistance:Number = (yclick - MyMovieClip.y );

if (Math.sqrt(yDistance*yDistance + xDistance*xDistance) < speed)
{
//در این قسمت می توانید حرکت کاراکتر را متوقف کنید و به آن دستور استپ دهید
MyMovieClip.x = xclick;
MyMovieClip.y = yclick;
stage.removeEventListener(Event.ENTER_FRAME, funFrame);
}
else
{
var radian = Math.atan2(yDistance, xDistance);
MyMovieClip.x += Math.cos(radian) * speed;
MyMovieClip.y += Math.sin(radian) * speed;
MyMovieClip.rotation = radian * 180 / Math.PI;
}

}[/JSS]


موفق باشید.
 

پیوست ها

  • move movie.rar
    6.8 کیلوبایت · بازدیدها: 7

peighami

New Member
دوست عزیز دست شما درد نکنه خیلی زحمت کشیدید و در واقع همونی هست که میخواستم
فقط یه راهنمایی میکنید، من کاراکترم تنها تو محور Xها باید قدم بزنه و وقتی به عقب برمیگرده باید روی کاراکتر هم در واقع invert بشه، من محور yها رو تو سورس شما برداشتم ولی کار نکرد و کاراکتر هم وقتی میزدم سمت چپ لنگ در هوا میشد بعد از دستکاریهای من روی سورس شما، میتونید یه راهنمایی کنید که باید چکار کنم؟ پیشاپیش ممنون بابت وقتی که میزارید
 

mmz2006

Active Member
باسلام

نه شما کد محور y رو برندارید . این لنگ در هوا شدن بخاطر اضافه شدن این خط کد هست .اونو غیر فعال کنید:

[JSS]MyMovieClip.rotation = radian * 180 / Math.PI;[/JSS]


ضمنا برای اینکه کاراکترتون اینورت بشه این کد زیر رو در قسمت فانکشن کلیک اضافه کنید :
[JSS]
if (xclick > MyMovieClip.x){
MyMovieClip.scaleX = 1 ;
}else{
MyMovieClip.scaleX = -1 ;
}
[/JSS]
باید اینطور بشه :
[JSS]
function funClick(event:MouseEvent):void
{
//اینجا کاراکتر پلی می شود
xclick = mouseX ;
yclick = mouseY ;
stage.addEventListener(Event.ENTER_FRAME, funFrame);
if (xclick > MyMovieClip.x){
MyMovieClip.scaleX = 1 ;
}else{
MyMovieClip.scaleX = -1 ;
}

}[/JSS]
 

peighami

New Member
دوست عزیز دست شما درد نکنه همه چیز ok شد و invert هم به درستی کار میکنه الی راه رفتن فقط در محور Xها ، که من هر کاری میکنم تو 2تا محور حرکت میکنه یا محور Yها رو حذف میکنم error میده یا درجا میزنه، میدونم خیلی اذیتت کردم اگه حوصله داشتی اینم جواب بدی یک دنیا ممنونت میشم.
 

mmz2006

Active Member
با سلام مجدد

خواهش می کنم
امیدوارم این کد جدید کارتون رو راه بندازه :
[JSS]
//به نام خدا
var speed:Number = 5 ;
var xclick:Number = 0 ;

stage.addEventListener(MouseEvent.CLICK, funClick);

function funClick(event:MouseEvent):void
{
//اینجا کاراکتر پلی می شود
xclick = mouseX ;
stage.addEventListener(Event.ENTER_FRAME, funFrame);
if (xclick > MyMovieClip.x){
MyMovieClip.scaleX = 1 ;
if(speed<0)speed = Math.abs(speed);
}else{
MyMovieClip.scaleX = -1 ;
if(speed>0)speed = -speed;
}

}

function funFrame(event:Event):void
{
MyMovieClip.x += speed;

if (MyMovieClip.scaleX == 1){
if (MyMovieClip.x>xclick){
//اینجا کاراکتر استپ میشود
stage.removeEventListener(Event.ENTER_FRAME, funFrame);
}
}else{
if (MyMovieClip.x<xclick){
//اینجا کاراکتر استپ میشود
stage.removeEventListener(Event.ENTER_FRAME, funFrame);
}
}

}
[/JSS]
 

peighami

New Member
دوست عزیز دست شما درد نکنه که پیگیر بودید، با این کد آخری کارم راه افتاد، موفق و پیروز باشید، امیدوارم من هم اگر در توانم بود تو زمینه گرافیگ بتونم به شما و دوستان کمک کنم
 

جدیدترین ارسال ها

بالا