Contacts
صفحه اصلی پورتال | صفحه اصلی تالار | ثبت نام | اعضاء | گروه ها | جستجو | پرسش و پاسخ | فروشگاه الکترونیکی | خرید پستی بازی های کامپیوتری





صفحه اول انجمنها -> ساخت بازی با نرم افزار 3D Game Studio -> سوال و جواب فنی مجلات AUM - بخش سوم
 

ارسال يك موضوع جديد   پاسخ به يك موضوع ديدن موضوع قبلي :: ديدن موضوع بعدي

سوال و جواب فنی مجلات AUM - بخش سوم
نويسنده
پيغام
مهمان







2 شنبه 26 تير 1385 - 10:02
پاسخ بصورت نقل قول
سلام دوستان

بخش سوم از سوال و جواب مجلات AUM را تقدیمتان میکنم .
توضیح اینکه مجلات AUM بصورت کتابچه های الکترونیکی از سوی سایت www.3dgamestudio.com در نوبت ماهانه منتشر میشوند و شامل انواع پروژه ها ، رفع مشکلات کاربران و معرفی ویژگیهای نهفته و جدید 3DGS هستند .
دانلود و استفاده از این مجلات برای تمامی کاربران کاملا رایگان است .

كد:


Q: Have you got a small clipping range example for us?

A: Here's a simple function that uses clipping and white fog to hide it.

 

starter set_clipping()

{

       sleep (1); // wait a bit

       d3d_fogcolor1.red = 255; // set up white fog

       d3d_fogcolor1.green = 255;

       d3d_fogcolor1.blue = 255;

       fog_color = 1; // and enable it

       camera.clip_near = 10; // experimental value, play with it

       camera.clip_far = 10000; // clip everything outside the 10000 quants radius, play with 10000

       camera.fog_start = 100; // experimental value, play with it

       camera.fog_end = 0.95 * camera.clip_far; // put dense fog close to the end of the clipping area

}

 

 

Q: I can't figure out how to run the older Aum scripts in full screen mode. They keep appearing as a large window. How do I fix this?

A: Place this line at the beginning of the script(s):

 

var video_screen = 1;

 

 

Q: How can you make an entity face another entity that triggered an event? The rotation should be progressive, using the pan angle.

A: Use the following example.

 

function rotate_me

{

       my.event = null; // trigger a single event

       while (you != null)

       {

               vec_set (temp.x, you.x);

               vec_sub (temp.x, my.x);

               vec_to_angle (my.skill40, temp); // use any free skill here

               my.pan -= ang(my.pan - my.skill40) * 0.1 * time; // 0.1 = rotation speed

               wait (1);

       }

}

 

action trigger_me

{

       my.enable_trigger = on;

       my.trigger_range = 200;

       my.event = rotate_me;

}

 

 

Q: I am trying to make a simple 'collect 10 items and win' type game but really don't have a clue about coding. I would like an audio file to play every time I collect an item and I'd like a music file and splash screen to appear when all the items are collected.

A: Use this snippet:

 

var items_to_collect = 10;

var items_collected = 0;

 

sound collected_wav = <collected.wav>;

sound completed_wav = <completed.wav>;

 

bmap completed_pcx = <completed.pcx>;

 

panel completed_pan

{

       bmap = completed_pcx;

       layer = 20;

       flags = overlay, refresh;

}

 

action collectable_item // place 10 objects in the level and assign them this action

{

       my.passable = on;

       while (player == null) {wait (1);}

       while (vec_dist (player.x, my.x) > 70) {wait (1);}

       snd_play (collected_wav, 50, 0);

       items_collected += 1;

       my.invisible = on;

       sleep (2); // wait until the entire sound has been played

       ent_remove (my); // now we can safely remove the entity

}

 

starter objects_are_collected()

{

       while (items_to_collect != items_collected) {wait (1);}

       sleep (1);

       snd_play (completed_wav, 100, 0);

       completed_pan.visible = on;

}

 

 

Q: I have spent hours trying to figure out how I can add jumping to your code from Aum52's workshop. Can you help?

A: Replace action players_code with the one below:

 

action players_code

{

       var anim_percentage; // animation percentage

       var jump_percentage; // animation percentage for jumping

       var movement_speed; // player's movement speed

       var distance_to_ground; // the distance between player's origin and the ground

       var jump_height;

       var reached_height;

       player = my; // I'm the player

       while (1)

       {

               my.pan += 6 * (key_a - key_d) * time; // rotate the player using the "A" and "D" keys

               vec_set (temp.x, my.x); // copy player's position to temp

               temp.z -= 5000; // set temp.z 5000 quants below player's origin

               distance_to_ground = c_trace (my.x, temp.x, ignore_me | use_box);

               movement_speed.x = 5 * (key_w - key_s) * time; // move the player using "W" and "S"

               movement_speed.y = 0; // don't move sideways

               if ((key_space == on) && (reached_height == 0))

               {

                       jump_height = min(40, jump_height + 5 * time); // 40 sets the height, 5 sets the ascending speed

                       if (jump_height == 40) // reached the maximum height? Then start descending!

                       {

                               reached_height = 1;

                               jump_height = max(0, jump_height - 5 * time); // 5 sets the falling speed

                       }

               }

               else // space isn't pressed anymore?

               {

                       jump_height = max(0, jump_height - 3 * time); // use a smaller falling speed (3) for (potential) smaller jumps

                       if ((jump_height == 0) && (key_space == off)) // the player has touched the ground?

                       {

                               reached_height = 0; // then allow it to jump again

                       }

               }

               movement_speed.z = - (distance_to_ground - 17) + jump_height; // 17 = experimental value

               movement_speed.z = max (-35 * time, movement_speed.z); // 35 = falling speed

               c_move (my, movement_speed.x, nullvector, glide); // move the player

               if (jump_height == 0) // the player isn't jumping?

               {

                       if ((key_w == off) && (key_s == off)) // the player isn't moving?

                       {

                               ent_animate(my, "stand", anim_percentage, anm_cycle); // play the "stand" animation

                       }

                       else // the player is moving?

                       {

                               ent_animate(my, "walk", anim_percentage, anm_cycle); // play the "walk" animation

                       }

                       anim_percentage += 5 * time; // 5 = animation speed

                       jump_percentage = 0; // always start jumping with the first frame

               }

               else // the player is jumping

               {

                       jump_percentage += 5 * time; // 5 = jump animation speed

                       ent_animate(my, "jump", jump_percentage, anm_cycle); // play the "jump" animation

               }

               wait (1);

       }

}

 

 

Q: How can I let 3DGS check if the game has been started with a specific command line (parameter)? If the parameter is missing I'd like to show a panel which says that the game wasn't started with the needed shortcut.

A: Use this example:

 

bmap error_pcx = <error.pcx>;

 

panel error_pan

{

       bmap = error_pcx;

       flags = overlay, refresh;

}

 

function main()

{

       ifndef hq; // the user didn't start the engine using the "-d hq" = high quality parameter

               error_pan.visible = on; // tell the user that he has forgotten to start the engine using the "hq" option

               while (key_any == off) {wait (1);} // wait until the user presses a key

               exit; // and then shut down the engine

       ifelse; // the user has used the "hq" command line

               video_switch(8, 0, 0); // so let's switch to 1024x768 pixels

       endif;

       // function main continues here

       ......................

}

 

 

Q: Is there any way to stop my character from going through parts of my models? if I make a table the model goes through it until it hits a certain point or it can't get around the model because it's like a barrier around it.

A: What you are seeing is the invisible bounding box of the model, which is used for faster collision detections. Use a wmb entity instead of a model for your table or attach the following action to it. Don't forget to move your entities using c_move; otherwise, you won't be able to use the new, polygon-based collision detection system.

 

action proper_collision

{

       my.polygon = on;

}

 

 

Q: I've made a menu for my game with an "options" section. What's the best way to save the settings so that they don't reset back to the defaults every time the game is run?

A: Use this example:

 

var filehandle;

var video_resolution;

 

// run function save_settings at least once before running load_settings

// otherwise, you won't have any settings.txt file to read from

function save_settings() // call this function before exiting the game

{

       filehandle = file_open_write("settings.txt");

       file_var_write (filehandle, video_mode); // save the video resolution

       file_asc_write (filehandle, 13); // move on to the following line

       file_asc_write (filehandle, 10);

       file_var_write (filehandle, sound_vol); // save the sound volume

       file_asc_write (filehandle, 13); // move on to the following line

       file_asc_write (filehandle, 10);

       file_var_write (filehandle, midi_vol); // save the midi volume

       file_close(filehandle); // close the file       

}

 

// call this from function main()

function load_settings()

{

       sleep (1);

       filehandle = file_open_read("settings.txt"); // open the settings.txt file

       video_resolution = file_var_read(filehandle); // read the video resolution

       video_switch(video_resolution, 0, 0); // set the new video resolution

       sound_vol = file_var_read(filehandle); // set the volume of the sound

       midi_vol = file_var_read(filehandle); // set the volume of the midi music

       file_close(filehandle); // close the file;

}

 

 

Q: I want to play a sound with a random change of frequency. When I do that, the frequency of the other sounds that are played in my game is changed as well. How can I stop that?

A: Examine the snippet below; it uses a sound that changes its frequency and another one that keeps its frequency.

 

sound siren1_wav = <siren1.wav>;

sound siren2_wav = <siren2.wav>;

 

action variable_freq

{

       var sound_handle;

       sound_handle = ent_playloop (my, siren1_wav, 40);

       while (1)

       {

               snd_tune (sound_handle, 0, (10 + random(290)), 0); // change the frequency from 10% to 300%

               sleep(1);

       }

}

 

action fixed_freq

{

       var sound_handle;

       sound_handle = ent_playloop (my, siren2_wav, 100);

}

 

 

 

Q: I was wondering how do you create a button that plays a full screen movie and then, only once the video is finished, loads a level.

A: Use this example:

 

var movie_handle;

 

bmap movie_pcx = <movie.pcx>;

bmap playmovie1_pcx = <playmovie1.pcx>;

bmap playmovie2_pcx = <playmovie2.pcx>;

 

function play_the_movie();

 

panel movie_pan

{

       bmap = movie_pcx;

       layer = 5;

       button = 50, 150, playmovie2_pcx, playmovie1_pcx, playmovie2_pcx, play_the_movie, null, null;

       flags = overlay, refresh, visible;

}

 

function play_the_movie()

{

       movie_pan.visible = off;

       movie_handle = media_play("test.avi", null, 100);

       while (media_playing (movie_handle) == 0) {wait (1);} // wait until the movie starts playing

       while (media_playing (movie_handle) != 0) {wait (1);} // wait until the movie has stopped

       beep; beep; // load your new level here

}



موفق باشید : ستاره
ارسال  بازگشت به بالا
 

نمايش نامه هاي ارسال شده قبلي:   
ارسال يك موضوع جديد   پاسخ به يك موضوع    صفحه 1 از 1 تمام ساعات و تاريخها بر حسب 3.5+ ساعت گرينويچ مي باشد


 
پرش به:  


شما نمي توانيد در اين انجمن نامه ارسال كنيد.
شما نمي توانيد به موضوعات اين انجمن پاسخ دهيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن ويرايش كنيد
شما نمي توانيد نامه هاي ارسالي خود را در اين انجمن حذف كنيد
شما نمي توانيد در نظر سنجي هاي اين انجمن شركت كنيد


unity3d

بازگردانی به فارسی : علی کسایی @ توسعه مجازی کادوس 2004-2011
Powered by phpBB © 2001, 2011 phpBB Group
| Home | عضويت | ليست اعضا | گروه هاي كاربران | جستجو | راهنماي اين انجمن | Log In |