2008-12-01 14 views
16

Đó là một kỳ nghỉ cuối tuần dài, vì vậy tôi có lỗi mã hóa một lần nữa và bắt đầu chơi xung quanh:2d platformer vật lý

Mario http://gfilter.net/junk/tileengine.jpg

Tôi đã viết một động cơ gạch cơ bản, nhưng đã bao giờ cố gắng này trước đây, tôi thực sự đấu tranh với việc xử lý phát hiện va chạm sprite và thực hiện vật lý thực tế cho lực hấp dẫn.

Đối với bất kỳ nhà văn sở thích trò chơi nào khác, bạn có thể chỉ cho tôi hướng dẫn một số hướng dẫn về cách tốt nhất để tiếp cận điều này không?

Cập nhật:

tôi nghĩ rằng tôi muốn chia sẻ một báo cáo tiến độ:

http://www.youtube.com/watch?v=-RKNQ2UiiLY < - Trò chơi trong hành động

của nó vẫn thực sự lỗi, nhưng phát hiện va chạm chủ yếu làm việc, tôi đã bắt đầu làm việc trên một số tính năng khác (chẳng hạn như chạm vào các khối (thông báo lỗi) và tương tác với kẻ thù).

Mario vẫn đi như anh ấy đang ở trên mặt trăng, tôi đang sử dụng các hằng số này, bất kỳ lời khuyên nào để tinh chỉnh chúng cho hiện thực hơn?

const float AirDrag = 1.00f; 
    const float GroundFriction = .97f; 
    const float Gravity = 0.8f; 
+8

Video tắt! –

Trả lời

1

Đó có thể là đường vòng, nhưng thử bộ khởi động Platformer từ XNA 3.0, chứa các nội dung như Phát hiện va chạm cơ bản và Vật lý. Bạn sẽ cần phải thay đổi công cụ để làm cho nó hoạt động bên ngoài XNA, nhưng nó không phải là khoa học tên lửa.

XNAGS 3.0 download

2

Gravity là dễ dàng:

const gravity = ... ; // pixels per timestep (eg. video frame) squared 
// while in freefall, each timestep: 
y_velocity += gravity; 
y_pos += y_velocity; 

Tâm trí bạn, hầu hết các trò chơi nền tảng 2ngày tôi đã chơi không có trọng lực thực tế. Chỉ cần làm bất cứ điều gì làm cho trò chơi thú vị!

+4

Về mặt kỹ thuật, tôi nghĩ bạn nên cập nhật vị trí đầu tiên (vì vậy nó sử dụng vận tốc của dấu thời gian trước đó), sau đó cập nhật vận tốc. – gnovice

+0

@gnovice Thậm chí kỹ thuật hơn, hãy kiểm tra verlet – super

-6

Đã bao giờ nghe nói về GameMaker?

+7

Điều đó khiến tất cả những điều thú vị của nó. – FlySwat

+0

bạn muốn dành cuộc sống của bạn làm những việc khó khăn, là khách của tôi – wjhplano

2

jnrdev có thể có một số trợ giúp. Nó bao gồm gạch va chạm/phản ứng và dốc. Nó không phải là mã tốt nhất mà tôi từng thấy, nhưng nó đã hoàn thành công việc.

+0

Cảm ơn bạn đã liên kết đó. Tôi cũng sẽ giới thiệu nó nhưng nó đã bị mất trong nhiều năm qua trong dấu trang của tôi :) – grepsedawk

0

Tôi không biết bạn đang sử dụng mô hình vật lý nào nhưng các mô hình vật lý sử dụng fluid drag gần đây đã được giải quyết trong another SO question. Tôi sẽ không lặp lại mọi thứ mà tôi đưa ra trong câu trả lời của mình, tôi sẽ chỉ link to it.

Để tóm tắt, OP cho câu hỏi muốn đẩy nhanh đối tượng từ phần còn lại đến tốc độ tối đa. Tôi đã đi qua một vài dẫn xuất cho mô hình vận tốc như một hàm của thời gian cho hai loại kéo khác nhau. Tình huống của bạn có thể hơi khác, vì vậy tích phân được sử dụng có thể có các biểu mẫu khác nhau hoặc cần được giải quyết với các điều kiện ban đầu khác nhau, nhưng hy vọng câu trả lời của tôi sẽ chỉ cho bạn một số hướng dẫn thông tin.

2

Có một số hướng dẫn platformer 2 chiều hữu ích thực sự hữu ích tại http://www.metanetsoftware.com/technique/tutorialA.htmlhttp://www.metanetsoftware.com/technique/tutorialB.html. Tôi nghĩ rằng họ đã được tham chiếu bởi những người khác ở nơi khác trên SO. Họ bao gồm phát hiện va chạm và phản ứng, raycasting, kỹ thuật tối ưu hóa khác nhau vv và có một lời giải thích tốt về lý thuyết đằng sau tất cả cho những người (như tôi) những người ít toán học nghiêng. Nó không đi xa như những thứ như động lực cơ thể cứng nhắc, nhưng tôi không nghĩ rằng bạn cần nó cho loại trò chơi bạn đang viết (mặc dù nó sẽ tất nhiên là mát mẻ nếu bạn thêm loại công cụ này .. .)

+0

bởi cái nhìn của nó, các hướng dẫn tôi đề nghị bao gồm các công cụ tương tự để jnrdev được đề cập bởi Zack Mulgrew. Tôi chưa đọc jnrdev (ngoài một cái nhìn ban đầu) vì vậy không thể so sánh chúng với nhau. – bm212

0

Lỗi của bạn với nhiều khối bị va chạm, bạn có thể khắc phục điều đó bằng cách chỉ chạm vào khối được căn chỉnh gần nhất với đầu ghi người chơi hoặc có số lần bù ít nhất. Hãy chắc chắn không giới hạn nó chỉ theo một hướng. Khối thực sự có thể bị va chạm từ bất kỳ hướng nào trong Mario. (Trên bằng cách làm một pound đất trong các trò chơi tương tự, hoặc mũi khoan-điều) (Sides bằng cách sử dụng một vỏ)

0
UIGraphicsBeginImageContext(images.size); 
    CGContextRef context = UIGraphicsGetCurrentContext(); 
    UIColor *color = [UIColor whiteColor]; 
    [color setFill]; 

    CGContextTranslateCTM(context, 1, images.size.height); 
    CGContextScaleCTM(context, 1.0, -1.0); 
    CGContextSetBlendMode(context, kCGBlendModeDestinationOver); 
    CGRect rect = CGRectMake(0.0, 0.0, images.size.width, images.size.height); 
    CGContextDrawImage(context, rect, images.CGImage); 
    CGContextClipToMask(context, rect, images.CGImage); 
    CGContextAddRect(context, rect); 
    CGContextDrawPath(context, kCGPathFill); 
    images = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext();