|
1 registered members (AndrewAMD),
1,065
guests, and 8
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Objekteigenschaften
[Re: natrox]
#378344
07/22/11 17:23
07/22/11 17:23
|
Joined: Sep 2003
Posts: 5,900 Bielefeld, Germany
Pappenheimer
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
|
Du kannst einen Strahl (c_trace) von Deinem Charakter nach vorne senden, wenn der Strahl auf ein Objekt trifft, gibt er den Abstand und setzt den you-Pointer auf das Objekt, über den Du Eigenschaften von ihm abfragen kannst. VECTOR temp; vec_for_angle(temp, my.pan);//winkel des characters wird in einen Vector der Länge 1 konvertiert. vec_normalize(temp, 50);//vektor wird um 50 verlängert vec_add(temp, my.x);//die Position des Charakters wird zum Vektor dazu addiert, so dass wir jetzt die genaue Position 50 Einheiten vor dem Charakter haben c_trace(...);//hier kommt die position des Charakters als Ausgangspunkt des Strahles und temp als Zielpunkt des Strahles rein if(you)//falls nun ein Object dort ist { my.pan += 45;//...dann drehe den Charakter um 45 Grad, so dass er mit großer Wahrscheinlichkeit vorbeigeht Das ist jetzt auf die Schnelle sehr grob hingeschrieben, kann man alles verfeinern - und - muss man nochmal auf die Syntax und mögliche Denkfehler überprüfen!  Viel Spass! }
|
|
|
Re: Objekteigenschaften
[Re: natrox]
#378422
07/23/11 15:52
07/23/11 15:52
|
Joined: Sep 2003
Posts: 5,900 Bielefeld, Germany
Pappenheimer
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 5,900
Bielefeld, Germany
|
Zeig mal den Code, damit man sieht wie du die Drehung eingebaut hast, dann kann Dir eher einer weiterhelfen.
Last edited by Pappenheimer; 07/23/11 15:52. Reason: ^^ da war einer schneller!
|
|
|
Re: Objekteigenschaften
[Re: Pappenheimer]
#378428
07/23/11 16:14
07/23/11 16:14
|
Joined: Jul 2011
Posts: 5
natrox
OP
Newbie
|
OP
Newbie
Joined: Jul 2011
Posts: 5
|
Hey, wichtig ist State 5. Hier hat er sich auch teilweise gedreht. Schon viel verwurstet =) Code:
#include <acknex.h>
#include <default.c>
#define STATE skill1
#define ANIMATION skill2
var target_x = 0;
var target_x2 = 0;
var target_y = 0;
var target_z = 0;
var start;
var camview = 0;
FONT* arial_font = "Arial#24b";
TEXT* name_txt =
{
pos_x = 800;
pos_y = 50;
font(arial_font);
string(tex_name);
flags = SHOW;
}
PANEL* distance_x =
{
pos_x = 100;
pos_y = 50;
digits (0, 0, "Objekt X: %.0f", arial_font, 1, target_x);
flags = SHOW;
}
PANEL* distance_x2 =
{
pos_x = 100;
pos_y = 80;
digits (0, 0, "Target X2: %.0f", arial_font, 1, target_x2);
flags = SHOW;
}
PANEL* distance_y =
{
pos_x = 100;
pos_y = 110;
digits (0, 0, "Objekt Y: %.0f", arial_font, 1, target_y);
flags = SHOW;
}
PANEL* distance_z =
{
pos_x = 100;
pos_y = 140;
digits (0, 0, "Objekt Z: %.0f", arial_font, 1, target_z);
flags = SHOW;
}
function main()
{
screen_size.x = 800;
screen_size.y = 600;
level_load("Gang_mitLicht_mitTisch.wmb");
camera.pan -= mouse_force.x;
start = camera.pan; // Start wert für X-Richtung
while (1)
{
mouse_pos.x = mouse_cursor.x;
mouse_pos.y = mouse_cursor.y;
if(camera.pan > (start - 90) && camera.pan < (start + 90))
{
camera.pan -= mouse_force.x;
}
else if(camera.pan <= (start - 90))
{
if(mouse_force.x < 0)
camera.pan -= mouse_force.x;
}
else if(camera.pan >= (start + 90))
{
if(mouse_force.x > 0)
camera.pan -= mouse_force.x;
}
if(camera.tilt > -90 && camera.tilt < 90)
{
camera.tilt += mouse_force.y;
}
else if(camera.tilt <= -90)
{
if(mouse_force.y > 0)
camera.tilt += mouse_force.y;
}
else if(camera.tilt >= 90)
{
if(mouse_force.y < 0)
camera.tilt += mouse_force.y;
}
wait (1);
}
}
function robot_hit()
{
/* Die Funktion wird aufgerufen sobald der Roboter auf ein Objekt trifft.
* c_scan ermittelt Entities oder andere Objekte innerhalb eines Kegels oder einer Kugel.
* c_scan für WAND-Ermittlung verwenden!!!!!! hit teil verwenden für kollision
*/
draw_text("Ouch!! I'am ruleings...",10,10,vector(50,255,50));
c_scan(my.x,my.pan,vector(360,0,750),SCAN_ENTS | SCAN_FLAG2 | IGNORE_ME);
if(target)
{
target_x2 = target.x;
draw_text("Ouch!! I'am ruleings11111...",10,10,vector(50,255,50));
draw_text("Ouch!! I'am ruleings22222...",10,10,vector(50,255,50));
}
my.STATE = 1;
}
function camera_follow(ENTITY* ent)
{
while(1)
{
vec_set(camera.x,vector(camview,0,150)); // -550 camera position relative to the player
vec_rotate(camera.x,ent.pan); // rotate the camera position with the player
vec_add(camera.x,ent.x); // add player position
//vec_set(camera.pan,vector(ent.pan,-10,0)); // look in player direction, slighty down
wait(1);
}
}
action robot_walk()
{
camera_follow(me);
VECTOR temp;
VECTOR vFeet;
vec_for_min(vFeet,me); // vFeet.z = distance from player origin to lowest vertex
VECTOR content_right; // Sensor für rechten content
VECTOR content_left; // Sensor für linken content
set(my,FLAG2);
my.STATE = 1;
while (1)
{
if (key_q)
{
my.STATE = 1;
}
// state 1: laufen ////////////////////////////////////////////
if (my.STATE == 1)
{
// rotate the entity with the arrow keys
my.pan += (key_cul-key_cur)*5*time_step;
// move the entity forward/backward with the arrow keys
var distance = (key_cuu-key_cud)*5*time_step;
c_move(me, vector(distance,0,0), NULL, GLIDE);
// animate the entity
my.ANIMATION += 2*distance;
ent_animate(me,"walk",my.ANIMATION,ANM_CYCLE);
// adjust entity to the ground height, using a downwards trace
c_trace(my.x,vector(my.x,my.y,my.z-1000),IGNORE_ME | IGNORE_PASSABLE);
my.z = hit.z - vFeet.z; // always place player's feet on the ground
my.z = my.z + 1;
if (key_space)
{
// key pressed -> go to state 2
my.STATE = 2;
}
if(key_p)
{
my.STATE = 3;
}
if(key_g)
{
my.STATE = 4;
}
if(key_t)
{
my.STATE = 5;
}
}
//state 2: rennen///////////////////////////////////
if (my.STATE == 2)
{
var distance = (key_cuu-key_cud)*50*time_step;
c_move(me, vector(distance,0,0), NULL, GLIDE);
// animate the entity
my.ANIMATION += 8*distance;
ent_animate(me,"walk",my.ANIMATION,ANM_CYCLE);
// adjust entity to the ground height, using a downwards trace
c_trace(my.x,vector(my.x,my.y,my.z-1000),IGNORE_ME | IGNORE_PASSABLE);
my.z = hit.z - vFeet.z; // always place player's feet on the ground
my.z = my.z + 50;
if (!key_space) my.STATE = 1;
}
if (my.STATE == 3)
{
//VECTOR to;
//vec_set(to,vector(camera.x, camera.y, camera.z));
// WICHTIG DAS ES HIER VOR DEM C_MOVE IST!!!!
var distance = c_trace(my.y,vector(my.x,my.y+1000,my.z),IGNORE_ME | SCAN_TEXTURE);
//var distance = c_trace(my.y,vector(my.x,my.y+1000,my.z),IGNORE_ME | IGNORE_PASSABLE);
//var distance = c_trace(my.x,vector(my.x+1000,my.y,my.z),IGNORE_ME | IGNORE_PASSABLE);
//var distance = c_trace(my.x,&to,IGNORE_ME | IGNORE_PASSABLE);
//my.y = hit.y - vFeet.y;
c_setminmax(me);//Setzt die Kollisionsbox auf den Avatar
//c_move(me, nullvector, vector(0, 15 * time_step, 0),IGNORE_ME | GLIDE);
//Nachschauen warum es so verwendet werden muss!!
c_move(me,vector(40*time_step,0,0),NULL,IGNORE_YOU);
my.ANIMATION += 2*distance;
ent_animate(me,"walk",my.ANIMATION,ANM_CYCLE);
if (HIT_TARGET)
{
target_x = hit.x;
target_y = hit.y;
target_z = hit.z;
my.event = robot_hit(); //Funktiondeklaration
my.emask |= ENABLE_IMPACT; //Start des Event sobald eine Kollision statt findet
my.STATE = 1;
}
}
if(my.STATE == 4)
{
VECTOR obe;
vec_set(obe,vector(16,300,-23));
// the road is clear? then rotate the enemy towards the player
if (c_content (content_left.x, 0) + c_content (content_left.x, 0) == 2)
{
vec_set(obe, my.x);
vec_sub(obe, my.x);
vec_to_angle(my.pan, obe); // turn the enemy towards the player
draw_text("Ouch!! I'am ruleings...",10,10,vector(50,255,50));
}
vec_set(content_right, vector(0, 50, -5));
vec_rotate(content_right, my.pan);
vec_add(content_right.x, my.x);
if (c_content (content_right.x, 0) != 1) // this area isn't clear?
{
my.pan += 5 * time_step; // then rotate the enemy, allowing it to avoid the obstacle
//my.pan += 45;
}
vec_set(content_left, vector(50, 5, -15));
vec_rotate(content_left, my.pan);
vec_add(content_left.x, my.x);
/*
if (c_content (content_left.x, 0) != 1) // this area isn't clear?
{
my.pan -= 5 * time_step; // then rotate the enemy, allowing it to avoid the obstacle
//my.pan -= 45;
}
*/
c_move (my, vector(10 * time_step, 0, 0), nullvector, GLIDE);
ent_animate(me,"walk",my.ANIMATION,ANM_CYCLE);
if ((total_frames % 80) == 1) // fire a bullet each second
{
vec_for_vertex (temp, my, 8);
// create the bullet at enemy's position and attach it the "move_enemy_bullets" function
}
}
if(my.STATE == 5)
{
VECTOR temp;
vec_set(temp.y, vector(0,50,0));
//vec_normalize(temp,50);
vec_rotate(temp,my.pan);
vec_add(temp.y,my.y);
if(c_trace(my.y,temp.y,IGNORE_ME + USE_BOX) > 0)
{
draw_text("bin hier =))!!!",10,10,vector(50,255,50));
my.pan += 5;
}
c_move (my, vector(10 * time_step, 0, 0), nullvector,GLIDE);
}
wait(1);
if(key_k)
{
if(camview==0)
{
camview=-550;
camera_follow(me);
}
else
{
camview=0;
camera_follow(me);
}
wait(3);
}
}
}
Last edited by natrox; 07/23/11 16:38.
|
|
|
Re: Objekteigenschaften
[Re: Pappenheimer]
#378440
07/23/11 17:33
07/23/11 17:33
|
Joined: Jul 2011
Posts: 5
natrox
OP
Newbie
|
OP
Newbie
Joined: Jul 2011
Posts: 5
|
Code:
#include <acknex.h>
#include <default.c>
#define STATE skill1
#define ANIMATION skill2
var target_x = 0;
var target_x2 = 0;
var target_y = 0;
var target_z = 0;
var start;
var camview = 0;
FONT* arial_font = "Arial#24b";
TEXT* name_txt =
{
pos_x = 800;
pos_y = 50;
font(arial_font);
string(tex_name);
flags = SHOW;
}
PANEL* distance_x =
{
pos_x = 100;
pos_y = 50;
digits (0, 0, "Objekt X: %.0f", arial_font, 1, target_x);
flags = SHOW;
}
PANEL* distance_x2 =
{
pos_x = 100;
pos_y = 80;
digits (0, 0, "Target X2: %.0f", arial_font, 1, target_x2);
flags = SHOW;
}
PANEL* distance_y =
{
pos_x = 100;
pos_y = 110;
digits (0, 0, "Objekt Y: %.0f", arial_font, 1, target_y);
flags = SHOW;
}
PANEL* distance_z =
{
pos_x = 100;
pos_y = 140;
digits (0, 0, "Objekt Z: %.0f", arial_font, 1, target_z);
flags = SHOW;
}
function main()
{
screen_size.x = 800;
screen_size.y = 600;
level_load("Gang_mitLicht_mitTisch.wmb");
camera.pan -= mouse_force.x;
start = camera.pan; // Start wert für X-Richtung
while (1)
{
mouse_pos.x = mouse_cursor.x;
mouse_pos.y = mouse_cursor.y;
if(camera.pan > (start - 90) && camera.pan < (start + 90))
{
camera.pan -= mouse_force.x;
}
else if(camera.pan <= (start - 90))
{
if(mouse_force.x < 0)
camera.pan -= mouse_force.x;
}
else if(camera.pan >= (start + 90))
{
if(mouse_force.x > 0)
camera.pan -= mouse_force.x;
}
if(camera.tilt > -90 && camera.tilt < 90)
{
camera.tilt += mouse_force.y;
}
else if(camera.tilt <= -90)
{
if(mouse_force.y > 0)
camera.tilt += mouse_force.y;
}
else if(camera.tilt >= 90)
{
if(mouse_force.y < 0)
camera.tilt += mouse_force.y;
}
wait (1);
}
}
function robot_hit()
{
/* Die Funktion wird aufgerufen sobald der Roboter auf ein Objekt trifft.
* c_scan ermittelt Entities oder andere Objekte innerhalb eines Kegels oder einer Kugel.
* c_scan für WAND-Ermittlung verwenden!!!!!! hit teil verwenden für kollision
*/
draw_text("Ouch!! I'am ruleings...",10,10,vector(50,255,50));
c_scan(my.x,my.pan,vector(360,0,750),SCAN_ENTS | SCAN_FLAG2 | IGNORE_ME);
if(target)
{
target_x2 = target.x;
draw_text("Ouch!! I'am ruleings11111...",10,10,vector(50,255,50));
draw_text("Ouch!! I'am ruleings22222...",10,10,vector(50,255,50));
}
my.STATE = 1;
}
function camera_follow(ENTITY* ent)
{
while(1)
{
vec_set(camera.x,vector(camview,0,150)); // -550 camera position relative to the player
vec_rotate(camera.x,ent.pan); // rotate the camera position with the player
vec_add(camera.x,ent.x); // add player position
//vec_set(camera.pan,vector(ent.pan,-10,0)); // look in player direction, slighty down
wait(1);
}
}
action robot_walk()
{
camera_follow(me);
VECTOR temp;
VECTOR vFeet;
vec_for_min(vFeet,me); // vFeet.z = distance from player origin to lowest vertex
VECTOR content_right; // Sensor für rechten content
VECTOR content_left; // Sensor für linken content
set(my,FLAG2);
my.STATE = 1;
while (1)
{
if (key_q)
{
my.STATE = 1;
}
// state 1: laufen ////////////////////////////////////////////
if (my.STATE == 1)
{
// rotate the entity with the arrow keys
my.pan += (key_cul-key_cur)*5*time_step;
// move the entity forward/backward with the arrow keys
var distance = (key_cuu-key_cud)*5*time_step;
c_move(me, vector(distance,0,0), NULL, GLIDE);
// animate the entity
my.ANIMATION += 2*distance;
ent_animate(me,"walk",my.ANIMATION,ANM_CYCLE);
// adjust entity to the ground height, using a downwards trace
c_trace(my.x,vector(my.x,my.y,my.z-1000),IGNORE_ME | IGNORE_PASSABLE);
my.z = hit.z - vFeet.z; // always place player's feet on the ground
my.z = my.z + 1;
if (key_space)
{
// key pressed -> go to state 2
my.STATE = 2;
}
if(key_p)
{
my.STATE = 3;
}
if(key_g)
{
my.STATE = 4;
}
if(key_t)
{
my.STATE = 5;
}
}
//state 2: rennen///////////////////////////////////
if (my.STATE == 2)
{
var distance = (key_cuu-key_cud)*50*time_step;
c_move(me, vector(distance,0,0), NULL, GLIDE);
// animate the entity
my.ANIMATION += 8*distance;
ent_animate(me,"walk",my.ANIMATION,ANM_CYCLE);
// adjust entity to the ground height, using a downwards trace
c_trace(my.x,vector(my.x,my.y,my.z-1000),IGNORE_ME | IGNORE_PASSABLE);
my.z = hit.z - vFeet.z; // always place player's feet on the ground
my.z = my.z + 50;
if (!key_space) my.STATE = 1;
}
if (my.STATE == 3)
{
//VECTOR to;
//vec_set(to,vector(camera.x, camera.y, camera.z));
// WICHTIG DAS ES HIER VOR DEM C_MOVE IST!!!!
var distance = c_trace(my.y,vector(my.x,my.y+1000,my.z),IGNORE_ME | SCAN_TEXTURE);
//var distance = c_trace(my.y,vector(my.x,my.y+1000,my.z),IGNORE_ME | IGNORE_PASSABLE);
//var distance = c_trace(my.x,vector(my.x+1000,my.y,my.z),IGNORE_ME | IGNORE_PASSABLE);
//var distance = c_trace(my.x,&to,IGNORE_ME | IGNORE_PASSABLE);
//my.y = hit.y - vFeet.y;
c_setminmax(me);//Setzt die Kollisionsbox auf den Avatar
//c_move(me, nullvector, vector(0, 15 * time_step, 0),IGNORE_ME | GLIDE);
//Nachschauen warum es so verwendet werden muss!!
c_move(me,vector(40*time_step,0,0),NULL,IGNORE_YOU);
my.ANIMATION += 2*distance;
ent_animate(me,"walk",my.ANIMATION,ANM_CYCLE);
if (HIT_TARGET)
{
target_x = hit.x;
target_y = hit.y;
target_z = hit.z;
my.event = robot_hit(); //Funktiondeklaration
my.emask |= ENABLE_IMPACT; //Start des Event sobald eine Kollision statt findet
my.STATE = 1;
}
}
if(my.STATE == 4)
{
VECTOR obe;
vec_set(obe,vector(16,300,-23));
// the road is clear? then rotate the enemy towards the player
if (c_content (content_left.x, 0) + c_content (content_left.x, 0) == 2)
{
vec_set(obe, my.x);
vec_sub(obe, my.x);
vec_to_angle(my.pan, obe); // turn the enemy towards the player
draw_text("Ouch!! I'am ruleings...",10,10,vector(50,255,50));
}
vec_set(content_right, vector(0, 50, -5));
vec_rotate(content_right, my.pan);
vec_add(content_right.x, my.x);
if (c_content (content_right.x, 0) != 1) // this area isn't clear?
{
my.pan += 5 * time_step; // then rotate the enemy, allowing it to avoid the obstacle
//my.pan += 45;
}
vec_set(content_left, vector(50, 5, -15));
vec_rotate(content_left, my.pan);
vec_add(content_left.x, my.x);
/*
if (c_content (content_left.x, 0) != 1) // this area isn't clear?
{
my.pan -= 5 * time_step; // then rotate the enemy, allowing it to avoid the obstacle
//my.pan -= 45;
}
*/
c_move (my, vector(10 * time_step, 0, 0), nullvector, GLIDE);
ent_animate(me,"walk",my.ANIMATION,ANM_CYCLE);
if ((total_frames % 80) == 1) // fire a bullet each second
{
vec_for_vertex (temp, my, 8);
// create the bullet at enemy's position and attach it the "move_enemy_bullets" function
}
}
if(my.STATE == 5)
{
VECTOR temp;
vec_set(temp.y, vector(0,50,0));
//vec_normalize(temp,50);
vec_rotate(temp,my.pan);
vec_add(temp.y,my.y);
if(c_trace(my.y,temp.y,IGNORE_ME + USE_BOX) > 0)
{
draw_text("bin hier =))!!!",10,10,vector(50,255,50));
my.pan += 5;
}
c_move (my, vector(10 * time_step, 0, 0), nullvector,GLIDE);
}
wait(1);
if(key_k)
{
if(camview==0)
{
camview=-550;
camera_follow(me);
}
else
{
camview=0;
camera_follow(me);
}
wait(3);
}
}
}
|
|
|
Re: Objekteigenschaften
[Re: natrox]
#378475
07/23/11 23:35
07/23/11 23:35
|
Joined: Feb 2011
Posts: 135
Myrkling
Member
|
Member
Joined: Feb 2011
Posts: 135
|
In deinem Code steht: (geringfügig verkürzt)
if(my.STATE == 5) {
VECTOR temp;
vec_set(temp.y, vector(0,50,0));
vec_rotate(temp,my.pan);
vec_add(temp.y,my.y);
if(c_trace(my.y,temp.y,IGNORE_ME + USE_BOX) > 0)
Ersetze hier alle temp.y mit temp und alle my.y mit my.x. Wenn du in die Blickrichtung der Entity tracen willst, müsste der Vektor auf 50,0,0 gesetzt werden.
|
|
|
|